6

Tôi có phần mới về Unity và tiêm phụ thuộc. Tôi đang cố gắng để viết một bài kiểm tra đơn vị mà đi một cái gì đó như thế này:Đăng ký các trường hợp NUnit DynamicMock trong UnityContainer

[Test] 
public void Test() 
{ 
    UnityContainer container = new UnityContainer(); 
    DynamicMock myMock = new DynamicMock(typeof(IMyInterface)); 
    container.RegisterInstance(typeof(IMyInterface), myMock.MockInstance); //Error here 

    // Continue unit test... 
} 

Khi kiểm tra này thực hiện, container ném một ArgumentNullException bên trong phương pháp RegisterInstance với thông điệp Value cannot be null. Parameter name: assignmentValueType.

Dòng trên cùng của ngăn xếp dấu vết là at Microsoft.Practices.Unity.Utility.Guard.TypeIsAssignable(Type assignmentTargetType, Type assignmentValueType, String argumentName).

Tại sao tôi không thể đăng ký MockInstance với UnityContainer và làm cách nào để giải quyết vấn đề này?

+0

Related: http://stackoverflow.com/questions/2098937/proper-way-to-mock-repository-objects-for-unit-tests-using-moq-and-unity/2102104 –

+0

Bạn đã đặt câu hỏi của mình chưa trên trang Unity Codeplex? http://unity.codeplex.com/ Bạn có thể nhận được câu trả lời ở đó. –

Trả lời

3

Tôi không thấy điều này. Tôi đang sử dụng NUnit 2.5.5.10112Unity 2.0 (được giao với EntLib, bản phát hành riêng lẻ chưa có sẵn).

Cập nhật: Tôi vừa kiểm tra với 1.2 và tôi thấy hành vi của bạn. Đây là vấn đề với 1.2.

namespace UnityRepro 
{ 
    public interface IMyInterface 
    { 
     void Foo(); 
    } 

    public class Class1 
    { 
     [Fact] 
     public void Test() 
     { 
      UnityContainer container = new UnityContainer(); 
      DynamicMock myMock = new DynamicMock(typeof(IMyInterface)); 
      container.RegisterInstance(typeof(IMyInterface), myMock.MockInstance); //Error here 

      Assert.NotNull(container.Resolve<IMyInterface>()); 
     } 
    } 
} 

Bạn có thể cập nhật lên Unity 2.0 không? Nếu không, tôi sẽ cố gắng đào sâu hơn và tìm hiểu điều gì đang diễn ra. Tuy nhiên, đây có thể là giới hạn 1.2.

+0

Rõ ràng là bạn đã dành chút thời gian trong ngày để điều tra điều này. Cảm ơn rất nhiều. – Phil

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