오래된 질문, 나는 비슷한 문제를 가지고 있었고, 이런 식으로 해결 :
I 다음 예제 코드를 가지고에만 호출하는 방법이 아니었다 있는지 확인해야하지만 특정 호출되었습니다 값.
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")));
}
}
희망이 있습니다.