我们的团队讨论了两个可能的单元测试版本。
版本1:
var dependencyMock = new Mock<IDependency>();
dependencyMock.Setup(m => m.DoSomething()).Returns("some string");
var classUnderTest = new ClassUnderTest(dependency.Object);
var result = classUnderTest.DoSomethingElse();
Assert.AreEqual("some string", result);
第2版:
string expectedResult = "some string";
var dependencyMock = new Mock<IDependency>();
dependencyMock.Setup(m => m.DoSomething()).Returns(expectedResult);
var classUnderTest = new ClassUnderTest(dependency.Object);
var result = classUnderTest.DoSomethingElse();
Assert.AreEqual(expectedResult, result);
讨论是关于“某些字符串”是否应该重复(版本1)或者是否应该放入变量(版本2)。我们都同意在单元测试中使用某些代码重复,如果它使测试更具可读性。对我来说,版本1更具可读性(对于我的同事,版本2更具可读性)。对我来说,似乎在可读性方面,两者都没有更好。
其中一个版本还有其他参数吗? (我不确定,如果这个问题在这里被提出是有效的,因为它可能导致讨论而且可能没有“答案”......)
答案 0 :(得分:1)
代码复制在单元测试中通常很好,因为它可以让您一眼就能看到正在做什么,但在这种情况下,您的复制实际上是一个负面的事情。
最重要的论点是版本2确保您不会意外地拥有不同的字符串。当你遇到不同的,更复杂的物体时,这是一个很好的习惯。