古い質問には答えずに、私は同様の問題を抱えていたし、このようにそれを解決:
私は、次のサンプルコードを持っており、メソッドが呼び出されただけでなく、ことを確認する必要がありますが、具体的に呼ばれました値。
public interface ILog
{
void Info(string message);
}
public interface ILogFactory
{
ILog GetLogger();
}
これは、インタフェース項目が注入されているテストされているクラス、次のとおりです。
public class NewAction
{
readonly ILogFactory _logger;
public NewAction(ILogFactory logger)
{
_logger = logger;
}
public void Step1()
{
_logger.GetLogger().Info("Step 1");
}
public void Step2()
{
_logger.GetLogger().Info("Step 2");
}
}
これは明らかに私の実際のコードの非常に単純化した図であるが、私はステップ1とステップ2いることを確認するために必要な予想どおりに動作し、ログに正しい値を渡した場合、正しい順序で確実に発生する必要があります。私のテスト:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
// Arrange
var log = new Mock<ILog>();
var factory = new Mock<ILogFactory>();
factory.Setup(l => l.GetLogger()).Returns(log.Object);
// Act
var action = new NewAction(factory.Object);
action.Step1();
action.Step2();
// Assert
factory.Verify(l => l.GetLogger());
log.Verify(l => l.Info(It.Is<string>(s => s == "Step 1")));
log.Verify(l => l.Info(It.Is<string>(s => s == "Step 2")));
}
}
希望します。