微软是否有权在这个例子中对每个测试执行多个断言?我最近一直在努力改进我的单元测试,真正让我感到困惑的UT的“规则”之一是“每次测试一个断言”。我很想知道人们是否认为MS在断言此测试方面做得正确(忽略缺少模拟等)。根据我目前的理解,这个示例实际上应该为每个需要测试的对象属性执行一次创建调用(而不是一次调用和多次断言)。我是否正确地做这个假设备?")]publicvoidCreateTest(){使用(TransactionScopets=newTransactionScope()){StoreManagerControllertarget=newStoreManagerController();Albumalbum=newAlbum(){GenreId=1,ArtistId=1,Title="NewAlbum",Price=10,AlbumArtUrl="/Content/Images/placeholder.gif"};动作结果实际;实际=目标。创建(专辑);Assert.IsTrue(album.AlbumId!=0);MusicStoreEntitiesstoreDB=newMusicStoreEntities();varnewAlbum=storeDB.Albums.SingleOrDefault(a=>a.AlbumId==album.AlbumId);Assert.AreEqual(album.GenreId,newAlbum.GenreId);Assert.AreEqual(album.ArtistId,newAlbum.ArtistId);Assert.AreEqual(album.Title,newAlbum.Title);Assert.AreEqual(album.Price,newAlbum.Price);Assert.AreEqual(album.AlbumArtUrl,newAlbum.AlbumArtUrl);}}按版本可以是(复制相册对象上的每个属性)[TestMethod()]publicvoidCreateTest_AlbumUrl(){//**ArrangevarstoreDB=newMock()//设置模拟商店的一些代码将放在此处StoreManagerControllertarget=新StoreManagerController(storeDB);Albumalbum=newAlbum(){GenreId=1,ArtistId=1,Title="NewAlbum",Price=10,AlbumArtUrl="/Content/Images/placeholder.gif"};//**Actactual=target.Create(album);varnewAlbum=storeDB.Albums.SingleOrDefault(a=>a.AlbumId==album.AlbumId);//**断言Assert.AreEqual(album.AlbumArtUrl,newAlbum.AlbumArtUrl);这条规则经常被误解,它不是关于单个断言(如代码行/断言调用),而是关于验证单个概念。在这种情况下,Microsoft会验证是否正确添加了相册——相册是一个单一的概念。RoyOsherove用非常简单的术语来说:我的指导方针通常是每次测试一个逻辑概念。您可以在同一个对象上有多个断言。它们通常是被测试的相同概念。这不应该是一个硬性规定,充其量只是一个经验法则。恕我直言,在许多情况下,将多个断言放入单个测试中会更简单、更容易。每个测试应该测试一个故事/案例,但这可能需要多个断言来验证。恕我直言,为了满足“规则”而创建多个几乎相同的测试是矫枉过正的。但这只是我个人的意见。我更倾向于遵守书本规则。你不应该从字面上理解这个规则,你应该只断言每个测试的一种行为,但你可能需要有几个Assert调用来只断言一种行为。在这种情况下,测试中的行为似乎是使用提供的信息创建相册。以上是C#学习教程:在这个例子中,微软是否有权在每个测试中执行多个断言?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
