如何在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());
}
答案 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));
}
}