【发布时间】:2013-10-30 05:16:11
【问题描述】:
所以我正在为我的单元测试使用模拟框架 (Moq),并且想知道什么时候应该使用模拟框架?
以下两种测试的优缺点是什么:
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");
}
}
【问题讨论】:
-
Mocking 允许你控制所有你没有测试的变量,这样你只测试一段代码。
-
+1 paqogomez,换句话说,模拟允许您隔离被测代码,以便您只测试特定的代码片段。好处是红色或绿色的测试结果表明代码的哪一部分是错误的。您通常会模拟服务,但通常会更多。然而,在这里,人几乎不需要被嘲笑。
标签: c# unit-testing mocking moq