2013-05-30 19 views
5

Với thử nghiệm sau đây:AutoFixture: PropertyData và các thông số không đồng nhất

[Theory] 
[PropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
) 
{ 
    var fixture = new Fixture();   

    var sut = fixture.Create<HtmlOutputBuilder>(); 

    sut.DoSomething(); 
    // More code 
} 

Tôi muốn để đóng gói tạo vật cố trong lớp học của riêng mình, một cái gì đó tương tự như:

[Theory] 
[CustomPropertyData("GetValidInputForDb")] 
public void GivenValidInputShouldOutputCorrectResult(
    string patientId 
    , string patientFirstName 
    , HtmlOutputBuilder sut 
) 
{ 
    sut.DoSomething(); 
    // More code 
} 

Vấn đề là tôi sử dụng PropertyData và sau đó cung cấp hai thông số đầu vào. Thực tế là sau đó tôi đang cố gắng tự động tạo lịch thi đấu của tôi như một tham số gây ra một ngoại lệ.

Đây là CustomPropertyData:

public class CustomPropertyDataAttribute : CompositeDataAttribute 
{ 
    public CustomPropertyDataAttribute(string validInput) 
     :base(new DataAttribute[] 
      { 
       new PropertyDataAttribute(validInput), 
       new AutoDataAttribute(new Fixture() 
        .Customize(new HtmlOutpuBuilderTestConvention())), 
      }) 
    { 

    } 
} 

các tùy chọn để giải quyết này là gì?

+0

'CustomPropertyData' trông như thế nào? –

+0

@NikosBaxevanis Tôi đã cập nhật OP. Tôi đã cố gắng viết mã của mình theo http://nikosbaxevanis.com/2012/07/27/composite-xunit-net-data-attributes/. – DavidS

Trả lời

3

Bạn cần phải cung cấp dữ liệu để các PropertyDataAttribute như sau:

public static IEnumerable<object[]> GetValidInputForDb 
{ 
    get 
    { 
     yield return new object[] 
     { 
      "123", 
      "abc" 
     }; 
    } 
} 

Giá trị patientId sẽ , giá trị patientFirstName sẽ abc và giá trị SUT sẽ được cung cấp tự động bằng AutoFixture.

Các CustomPropertyDataAttribute có vẻ tốt.

+0

Ok hãy để tôi quay lại bảng vẽ vì tôi đã làm rất nhiều những gì bạn đã đề xuất. Tuy nhiên, tôi đã nhận được một ngoại lệ. Tôi sẽ thử lại lần nữa và cố gắng nắm bắt nó nếu cần thiết. Cảm ơn bạn đã giúp đỡ. – DavidS

+0

Có vẻ như đó là sự cố với 'HtmlOutpuBuilderTestConvention' hoặc có lẽ là câu hỏi nhắm mục tiêu' PropertyDataAttribute' tại diễn đàn xUnit.net .. Để kiểm tra thay thế 'HtmlOutputBuilder' bằng' IDisposable' và 'HtmlOutpuBuilderTestConvention' bằng' AutoMoqCustomization', bạn có thể thấy rằng kiểm tra thực hiện. –

+0

Cảm ơn lời khuyên. Tôi vẫn phải cố gắng gợi ý cho bạn nhưng tôi sẽ liên hệ lại với bạn khi tôi đã tìm ra điều gì sai. – DavidS

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