沒有答案老問題,我也有類似的問題,解決它像這樣:
我有下面的示例代碼和需要驗證,不僅是所謂的方法,但被稱爲具有特定值。
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");
}
}
這顯然是我的實際代碼非常簡單的觀點,但我需要驗證第一步和第二步行爲如預期,並將正確的值傳遞給Log,這意味着我還需要確保它們以正確的順序發生。我的測試:
[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")));
}
}
希望這會有所幫助。