2016-04-05 15 views
7

Tôi muốn vượt qua một loạt các chuỗi để một trong những phương pháp thử nghiệm XUnit của tôi, nhưng khi tôi chỉ làm những việc sau nó không hoạt động (mảng + params cơ chế)đèo mảng của chuỗi để xUnit phương pháp thử nghiệm

[Theory] 
    [InlineData(new object[] { "2000-01-02", "2000-02-01" })] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings) 

tôi có thể làm việc xung quanh vấn đề như thế này:

[Theory] 
    [InlineData(0, new object[] { "2000-01-02", "2000-02-01" })] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(int dummy, string[] dateStrings) 

Nhưng tôi hy vọng có một cái gì đó tốt hơn để giải quyết vấn đề.

Bạn có thể cho tôi biết không?

+0

Số chuỗi trong mảng có thể là bất kỳ thứ gì. –

+0

là năm 2018 và đây vẫn là giải pháp duy nhất có hiệu quả đối với tôi. Nên thực sự mở một issure cho xUnit – yair

+0

sửa chữa rằng bình luận cuối cùng cho WAS giải pháp duy nhất. Nó xuất hiện có thực sự [một giải pháp đơn giản] (https://stackoverflow.com/a/48100749/978502) – yair

Trả lời

4

Đây là tính năng C# params trong đó mảng được mở rộng. do đó xunit không nhập nó vào một đối số của bạn, bạn có thể bỏ mảng để ép buộc nó, như sau:

[InlineData((object)(new object[] { "2000-01-02", "2000-02-01" }))] xem thêm here.

+0

Tôi đã thử điều đó và nó không hoạt động với chuỗi. –

+0

có tác dụng đối với tôi ... bạn có muốn chia sẻ gist/repo không? –

+0

https://gist.github.com/anonymous/af6fc4095705228909de923e25ac0645 –

1

này nên làm việc

[Theory] 
[InlineData(new object[] { new string[] { "2000-01-02", "2000-02-01" } })] 
public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings) 

Khi u khởi tạo một mảng đối tượng như bạn đã làm tất cả các yếu tố trên nó là một đối tượng duy nhất, vì vậy khi bạn cố gắng để vượt qua mảng chuỗi như tham số nó đi một yếu tố đầu tiên của đối tượng mảng "2000-01-02".

2

Sử dụng params trước string[] lập luận của phương pháp, và sau đó bạn sẽ không cần phải khởi tạo một string[] trong InlineData thuộc tính, thay vì bạn có thể sử dụng một số biến của string literals, mà trình biên dịch không phàn nàn một chút:

[Theory] 
    [InlineData("2000-01-02", "2000-02-01")] 
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(params string[] dateStrings) 
Các vấn đề liên quan