没有答案老问题,我也有类似的问题,解决它像这样:
我有下面的示例代码和需要验证,不仅是所谓的方法,但被称为具有特定值。
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")));
}
}
希望这会有所帮助。