所以我为我的单元测试玩弄嘲讽框架(Moq),并想知道什么时候应该使用模拟框架?何时使用Mocking Framework?
什么是以下两个试验之间的利益/缺点:
public class Tests
{
[Fact]
public void TestWithMock()
{
// Arrange
var repo = new Mock<IRepository>();
var p = new Mock<Person>();
p.Setup(x => x.Id).Returns(1);
p.Setup(x => x.Name).Returns("Joe Blow");
p.Setup(x => x.AkaNames).Returns(new List<string> { "Joey", "Mugs" });
p.Setup(x => x.AkaNames.Remove(It.IsAny<string>()));
// Act
var service = new Service(repo.Object);
service.RemoveAkaName(p.Object, "Mugs");
// Assert
p.Verify(x => x.AkaNames.Remove("Mugs"), Times.Once());
}
[Fact]
public void TestWithoutMock()
{
// Arrange
var repo = new Mock<IRepository>();
var p = new Person { Id = 1, Name = "Joe Blow", AkaNames = new List<string> { "Joey", "Mugs" } };
// Act
var service = new Service(repo.Object);
service.RemoveAkaName(p, "Mugs");
// Assert
Assert.True(p.AkaNames.Count == 1);
Assert.True(p.AkaNames[0] == "Joey");
}
}
模拟允许您控制所有未测试的变量,以便您只测试一段代码。 – paqogomez
+1 paqogomez,换句话说,模拟允许你隔离被测代码,这样你只能测试一个特定的代码段。好处是红色或绿色的测试结果表明哪部分代码是错误的。你通常嘲笑服务,但往往更多。然而,在这里,人们几乎不需要被嘲笑。 – citykid