2016-07-01 10 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

あなたが入力を模擬する必要があるのはなぜ?あなたがリストに追加することをテストする必要がある場合は、parametresだけをモックする必要があります。 –

答えて

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"));    
     } 
    } 
} 
関連する問題