断言集合的顺序正确

时间:2011-03-07 10:28:28

标签: c#

如何在MSTest中断言返回的集合的顺序是否正确?

[TestMethod]
    public void when_sorting_movies_it_should_be_able_to_sort_all_movies_by_title_descending()
    {
        populateTestMovies(movie_collection);
        MovieLibrary movieLibrary = new MovieLibrary(movie_collection);
        IEnumerable<Movie> results = movieLibrary.sort_all_movies_by_title_descending();
        Assert.IsTrue(results.Contains(theres_something_about_mary));
        Assert.IsTrue(results.Contains(the_ring));
        Assert.IsTrue(results.Contains(shrek));
        Assert.IsTrue(results.Contains(pirates_of_the_carribean));
        Assert.IsTrue(results.Contains(indiana_jones_and_the_temple_of_doom));
        Assert.IsTrue(results.Contains(cars));
        Assert.IsTrue(results.Contains(a_bugs_life));
        Assert.AreEqual(7, results.Count());
    }

6 个答案:

答案 0 :(得分:9)

使用预期顺序创建一个带有电影标题的硬编码IEnumerable<string>,从结果集合中提取标题并使用SequenceEqual检查它们是否按相同顺序排列(假设您引用的常量是Movie个对象,而Movie具有Title属性:

IEnumerable<string> expected = new[] 
{ 
    theres_something_about_mary.Title, 
    the_ring.Title,
   /* and so on */ 
};
Assert.IsTrue(results.Select(m => m.Title).SequenceEqual(expected));

答案 1 :(得分:3)

答案 2 :(得分:1)

您可以使用IEnumerable的SequenceEquals扩展方法,如下所示:

Assert.IsTrue(results.SequenceEquals(new[] {"cars", "a_bugs_life"}));

答案 3 :(得分:1)

Assert.AreEqual(actual,expected);

答案 4 :(得分:0)

如果您知道预期的订单,您可以对列表中的每个项目断言:

Assert.IsTrue(results[0]== theres_something_about_mary)
Assert.IsTrue(results[1]== the_ring)

答案 5 :(得分:0)

在这里,我使用了NUnit 2.4中引入的令人愉悦的Assert.That()语法。重要的是Is.EqualTo约束将强制参数的顺序。

[TestFixture]
public class UnitTest
{
    [Test]
    public void SameOrder() // passes
    {
        IEnumerable<int> expected = new[] { 1, 9, 0, 4};
        IEnumerable<int> actual = new[] { 1, 9, 0, 4 };
        Assert.That(actual, Is.EqualTo(expected));
    }

    [Test]
    public void WrongOrder() // fails
    {
        IEnumerable<int> expected = new[] { 1, 9, 0, 4 };
        IEnumerable<int> actual = new[] { 9, 0, 1, 4 };
        Assert.That(actual, Is.EqualTo(expected));
    }
}