2009-02-13 30 views
18

Khi thử nghiệm đơn vị không được sử dụng trong công ty của chúng tôi, tôi tự dạy mình để kiểm tra đơn vị mã của riêng tôi. Tôi đang sử dụng khung kiểm tra .net chuẩn cho một số thử nghiệm đơn vị thực sự cơ bản.Khẳng định IEnumerables

Phương pháp khai thác của tôi là IEnumerable<string> và tôi muốn kiểm tra đầu ra của nó. Vì vậy, tôi đã tạo một IEnumerable<string> được mong đợi để kiểm tra. Tôi nghĩ rằng tôi nhớ có một cách để Assert.ArePartsEqual hoặc một cái gì đó như thế, nhưng tôi dường như không thể tìm thấy nó.

Vì vậy, trong ngắn hạn, làm cách nào để kiểm tra xem hai số IEnumerable<string> có chứa cùng một chuỗi không?

+1

+1 cho thái độ và tính chuyên nghiệp tốt :) –

+0

Ông: P Đó là một trong những lời khen ngợi tốt hơn mà một lập trình viên cơ sở có thể nhận được;) –

Trả lời

23

Tôi không biết "khung kiểm tra .net chuẩn" nào bạn đang đề cập đến, nhưng nếu đó là công cụ kiểm tra Đơn vị hệ thống nhóm Visual Studio bạn có thể sử dụng CollectionAssert.

thử nghiệm của bạn sẽ như thế này:

CollectionAssert.AreEqual(ExpectedList, ActualList, "..."); 

Cập nhật: Tôi quên CollectionAssert cần một giao diện ICollection, vì vậy bạn sẽ phải gọi ActualList.ToList() để có được nó để biên dịch. Trả về IEnumerable là một điều tốt, vì vậy đừng thay đổi điều đó chỉ cho các bài kiểm tra.

+0

Điều này có ICollection, không phải là IEnumerable ... vì vậy bạn cần phải đẩy nó vào bộ sưu tập ... –

+0

@Marc Gravell, bạn nói đúng .. Tôi sẽ thêm nó vào "câu trả lời" –

11

Bạn muốn phương pháp SequenceEqual() mở rộng (LINQ):

string[] x = { "abc", "def", "ghi" }; 
    List<string> y = new List<string>() { "abc", "def", "ghi" }; 

    bool isTrue = x.SequenceEqual(y); 

hoặc chỉ:

bool isTrue = x.SequenceEqual(new[] {"abc","def","ghi"}); 

(nó sẽ trả về false nếu họ là độ dài khác nhau, hoặc bất kỳ mục nào khác)

+0

Vì vậy, để dịch nó thành một cái gì đó để kiểm tra đơn vị tôi có thể đi Assert.IsTrue (kết quả. SequenceEqual (dự kiến)); Điều này không cung cấp một thông điệp hữu ích, nhưng nó đưa tôi đến đó, vậy là ổn. –

+0

@boris: Sẽ thật dễ dàng để dịch mã (hiện tại là NUnit) của tôi sang phiên bản MS. Sau đó, bạn nhận được một tin nhắn tốt đẹp. –

+0

Vâng, tôi đã có một cái nhìn vào nó. Tôi hiện đang một chút bị khóa trong thời gian để thử nghiệm với đơn vị thử nghiệm như tôi đang làm nó loại unrequested (xem OP). Nhưng tôi sẽ cố gắng ép vào một số điều đó. –

5

Tôi có một ví dụ về điều này tôi đã sử dụng cho cuộc nói chuyện "Thực hiện LINQ với Đối tượng trong 60 phút" của tôi.

Nó cũng trong dự án MoreLinq của tôi. Đã cố gắng c'n'p nó ở đây, nó kết thúc tốt đẹp khủng khiếp. Chỉ cần grab from Github ...

+0

Liên kết mã Google bị hỏng, đây là liên kết hoạt động: https://code.google.com/p/morelinq/source/browse/MoreLinq.Test/TestExtensions.cs – vvnurmi

+0

@vvnurmi: Ah, niềm vui khi chuyển đổi từ svn sang hg :) Sẽ chỉnh sửa liên kết. –

+0

Đã chuyển đến github: https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq.Test/TestExtensions.cs – MKesper

Các vấn đề liên quan