相关疑难解决方法(0)

在单元测试中有多个断言是不好的做法吗?

在单元测试中有多个断言是不好的做法吗?有关系吗?

unit-testing assert

43
推荐指数
4
解决办法
2万
查看次数

在单元测试中多个断言是坏的吗?即使链接?

在这个单元测试中检查这么多东西有什么问题吗?:

ActualModel = ActualResult.AssertViewRendered()        // check 1
                          .ForView("Index")            // check 2
                          .WithViewData<List<Page>>(); // check 3

CollectionAssert.AreEqual(Expected, ActualModel);      // check 4
Run Code Online (Sandbox Code Playgroud)

此测试的主要目标是验证返回正确的视图(检查2)并且它包含正确的数据(检查4).

我可以通过将其分成多个测试来获得任何收益吗?我一切都是为了做正确的事情,但如果它没有实际价值我就不会分手了.

我对单元测试很陌生,所以请保持温和.

c# unit-testing mstest asp.net-mvc-2

40
推荐指数
4
解决办法
2万
查看次数

如何在单元测试中避免多个断言?

这是我第一次尝试进行单元测试,所以请耐心等待.
我仍在尝试对将POCO列表转换为ADO.Recordsets的库进行单元测试.

现在,我正在尝试编写一个创建a的测试List<Poco>,将其转换为Recordset(使用我想测试的方法),然后检查它们是否包含相同的信息(如,Poco.Foo == RS.Foo等等......) .

这是POCO:

public class TestPoco
{
    public string StringValue { get; set; }
    public int Int32Value { get; set; }
    public bool BoolValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...到目前为止这是测试(我正在使用xUnit.net):

[Fact]
public void TheTest()
{
    var input = new List<TestPoco>();
    input.Add(new TestPoco { BoolValue = true, Int32Value = 1, StringValue = "foo" });

    var actual = input.ToRecordset();

    Assert.Equal(actual.BoolValue, true);
    Assert.Equal(actual.Int32Value, 1);
    Assert.Equal(actual.StringValue, "foo");
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个是最后的三个断言,POCO的每个属性一个.
我已多次读过一次测试中的多个断言是邪恶的(我理解其中的原因,我同意).

问题是,我该怎样摆脱它们?

我有Roy Osherove的优秀着作"单位测试的艺术"就在我的面前,他有一个例子,它涵盖了这一点 …

c# unit-testing assert

11
推荐指数
2
解决办法
2729
查看次数

在此示例中,Microsoft是否有权在每个测试中执行多个断言?

最近我一直在努力改进我的单元测试,并且真正让我感到困惑的UT的"规则"之一是"每次测试的一个断言".

我很想知道人们是否认为MS在断言这个测试方面做了正确的事情(忽略缺乏模拟等).根据我目前的理解,这个例子应该真正执行一个需要测试的每个对象属性的创建调用(而不是一个调用和多个断言).我在做出这个假设时是否正确?

方法取自:http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3testing_topic4

[TestMethod()]
    [DeploymentItem("MvcMusicStore.mdf")]
    [DeploymentItem("MvcMusicStore_log.ldf")]
    public void CreateTest()
    {
            using (TransactionScope ts = new TransactionScope())
            {
                StoreManagerController target = new StoreManagerController();
                Album album = new Album()
                {
                    GenreId = 1,
                    ArtistId = 1,
                    Title = "New Album",
                    Price = 10,
                    AlbumArtUrl = "/Content/Images/placeholder.gif"
                };
                ActionResult actual;
                actual = target.Create(album);
                Assert.IsTrue(album.AlbumId != 0);
                MusicStoreEntities storeDB = new MusicStoreEntities();
                var newAlbum = 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);
            } …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing

1
推荐指数
1
解决办法
161
查看次数

标签 统计

unit-testing ×4

c# ×3

assert ×2

asp.net-mvc-2 ×1

mstest ×1