2014-10-23 18 views
5

Tôi sử dụng AutoFixture 3.21.0, AutoFixture.AutoMoq 3.21.0, NUnit 2.6.3 và Moq 4.2.1409.1722.AutoConfiguredMoqTùy chỉnh với giao diện triển khai lớp trừu tượng

Tôi có giao diện sau, hai lớp trừu tượng (một trong số chúng triển khai giao diện này) và hai thử nghiệm đơn vị.

Kiểm tra vượt qua.

public interface IMigration 
    { 
     IMigrationParameters MigrationParameters { get; set; } 
    } 

    public abstract class AbstractSutWithoutInterface 
    { 
     public IMigrationParameters MigrationParameters { get; set; } 
    } 

    public abstract class AbstractSutWithInterface : IMigration 
    { 
     public IMigrationParameters MigrationParameters { get; set; } 
    } 

    [TestFixture] 
    public class UnitTests 
    { 
     [Test] 
     public void TestAbstractSutWithoutInterface() 
     { 
      var fixture = new Fixture(); 
      fixture.Customize(new AutoConfiguredMoqCustomization()); 

      var mock = fixture.Create<AbstractSutWithoutInterface>(); 

      Assert.IsNotNull(mock.MigrationParameters); // test passes 
     } 

     [Test] 
     public void TestAbstractSutWithInterface() 
     { 
      var fixture = new Fixture(); 
      fixture.Customize(new AutoConfiguredMoqCustomization()); 

      var mock = fixture.Create<AbstractSutWithInterface>(); 

      Assert.IsNull(mock.MigrationParameters); // test passes 
     } 
    } 

Câu hỏi của tôi là lý do tại sao AutoConfiguredMoqCustomization đã hành vi khác nhau cho các lớp trừu tượng tuỳ thuộc vào việc tài sản được xác định bởi giao diện hay không? Trong tài sản thử nghiệm đầu tiên được khẳng định là không null nhưng trong thử nghiệm thứ hai là null. Nếu các lớp không trừu tượng, việc tiêm thuộc tính hoạt động như mong đợi cho cả hai lớp.

+1

Các lớp đó có thiếu từ khóa 'abstract' không? –

+0

@PatrickQuirk Cảm ơn bạn đã chỉ ra từ khóa bị thiếu trong mã nguồn. Tôi đã sửa chữa nó. – sgnsajgon

+0

Tôi không thể tái tạo, trong cả hai trường hợp, chúng không phải là vô giá trị đối với tôi. Tôi đang sử dụng phiên bản AutoFixture mới nhất, bạn đang sử dụng phiên bản nào? –

Trả lời

5

Cập nhật 2015/04/15

Lỗi này đã được cố định trong AutoFixture.AutoMoq 3.24.2. Xem chi tiết here.

Cập nhật 2014/11/03

này hiện đang được theo dõi trên GitHub AutoFixture của, Issue 324.

Ngoài ra, phiên bản làm việc cuối cùng của Moq là 4.2.1402.2112, bạn có thể hạ cấp xuống phiên bản đó thay vì 4.0.


Tôi chỉ có thể tạo lại điều này với phiên bản mới nhất của Moq (4.2.1409.1722).

Tôi đang xem xét điều này ngay bây giờ và người nhận như một lỗi đã được giới thiệu trong phiên bản mới nhất của Moq, nhưng có thể do thiết kế, tôi chưa chắc chắn.

Trong thời gian chờ đợi, vui lòng sử dụng phiên bản 4.0.10827. Để hạ cấp, vào Tools -> NuGet Packet Manager -> Package Manager Console và loại:

Uninstall-Package Moq -Force 
Install-Package Moq -Version 4.0.10827 

tôi sẽ cập nhật câu trả lời này với những phát hiện của tôi.

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