2016-07-01 12 views
0

Moq에서 입력 매개 변수를 변경하는 방법은 무엇입니까?

var list = new List<string>(); 
someObject.AddOne(list); 
Assert.AreEqual(1, list.Count); 

어떻게 내가 설정 내 모의을 고려? 예상대로

var mock = new Mock<SomeObject>(); 
var list = new List<string>(); 
mock 
    .Setup(so => so.AddOne(list)) 
    .Callback<List<string>>(l => l.Add("derp")); 

가 작동하지만 콜백이 호출되지 않습니다.

SomeObject는 내가 사용하는 외부 API이므로 변경할 수 없습니다.

+0

왜 입력을 조롱해야합니까? 목록에 추가를 테스트해야하는 경우 매개 변수 만 조롱하면됩니다. –

답변

2

이 테스트는 성공 :

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Moq; 
using System.Collections.Generic; 

namespace UnitTestProject 
{ 
    [TestClass] 
    public class UnitTest 
    { 
     public class SomeObject 
     { 
      public virtual void AddOne(List<string> aList) { } 
     } 

     [TestMethod] 
     public void SomeTest() 
     { 
      // Arrange 
      var mock = new Mock<SomeObject>(); 

      mock.Setup(so => so.AddOne(It.IsAny<List<string>>())) 
       .Callback<List<string>>(l => l.Add("derp")); 

      var target = mock.Object; 
      var list = new List<string>(); 

      // Act 
      target.AddOne(list); 

      // Assert 
      Assert.IsTrue(list.Contains("derp"));    
     } 
    } 
} 
관련 문제