2011-03-07 6 views
3

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()); 
    } 

답변

7

만들기 하드 코딩 예상에 영화 제목과 IEnumerable<string>을 순서대로 결과 컬렉션에서 제목을 가져오고 SequenceEqual을 사용하여 동일한 순서로 제공되는지 확인합니다 (참조 된 상수는 Movie 개체라고 가정하고 Movie은입니다).속성) :

IEnumerable<string> expected = new[] 
{ 
    theres_something_about_mary.Title, 
    the_ring.Title, 
    /* and so on */ 
}; 
Assert.IsTrue(results.Select(m => m.Title).SequenceEqual(expected)); 
0
당신이 예상하는 순서를 알고있는 경우는,리스트의 각 항목에 주장 할 수

:

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

'/ (?! <=) = (? ==)/== /'. – delnan

+0

IEnumerable 에는 인덱서가 없습니다. – alexn

1

당신과 같이,는 IEnumerable의 SequenceEquals 확장 방법을 사용할 수 있습니다 여기에

Assert.IsTrue(results.SequenceEquals(new[] {"cars", "a_bugs_life"})); 
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)); 
    } 
} 
1

Assert.AreEqual (actual, expected);