我是TDD和xUnit的新手,所以我想测试一下看起来像这样的方法:

List<T> DeleteElements<T>(this List<T> a, List<T> b);

我可以使用任何Assert方法吗?我认为这样的事情会很好

    List<int> values = new List<int>() { 1, 2, 3 };
    List<int> expected = new List<int>() { 1 };
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

    Assert.Exact(expected, actual);

有类似的东西吗?

其他提示

在当前版本的XUnit(1.5)中,您只需使用

即可
  

Assert.Equal(expected,actual);

上述方法将对两个列表进行逐元素比较。 我不确定这是否适用于任何先前版本。

使用xUnit,如果你想挑选每个元素的属性来测试你可以使用Assert.Collection。

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

这会测试预期的计数并确保每个操作都经过验证。

最近,我在我的asp.net core 2.2 app中使用 xUnit 2.4.0 Moq 4.10.1 包。

在我的情况下,我设法通过两个步骤来完成它:

  1. 定义 IEqualityComparer&lt; T&gt;
  2. 的实现
  3. 将comparer实例作为第三个参数传递给 Assert.True 方法:

    Assert.True(expected,actual,new MyEqualityComparer());

  4. 但是使用 FluentAssertions 软件包还有另一种更好的方法可以获得相同的结果。它允许您执行以下操作:

    // Assert          
    expected.Should().BeEquivalentTo(actual));
    

    有趣的是, Assert.Equal()总是失败,即使我订购了两个列表的元素,以便以相同的顺序获取它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top