首先,我是单元测试的初学者。对于我的测试,我想使用 NSubstitute,所以我阅读了网站上的教程以及 Richard Banks 的模拟比较。它们都在针对接口进行测试,而不是针对类进行测试。声明是“通常这个[替换]类型将是一个接口,但你也可以在紧急情况下替换类。”
现在我想知道针对接口进行测试的目的。这是来自 NSubstitute 网站的示例界面(请注意,我已经在 VB.net 中转换了 C# 代码):
Public Interface ICalculator
Function Add(a As Double, b As Double) As Double
Property Mode As String
Event PoweringUp As EventHandler
End Interface
这是来自网站的单元测试(在 NUnit-Framework 下):
<Test>
Sub ReturnValue_For_Methods()
Dim calculator = Substitute.For(Of ICalculator)()
calculator.Add(1, 2).Returns(3)
Assert.AreEqual(calculator.Add(1, 2), 3)
End Sub
好的,这行得通,单元测试将成功执行。但是这有什么意义呢?这不测试任何代码。Add -Method 可能有任何错误,在针对接口进行测试时不会检测到 - 如下所示:
Public Class Calculator
Implements ICalculator
Public Function Add(a As Double, b As Double) As Double Implements ICalculator.Add
Return 1 / 0
End Function
...
End Class
Add -Method执行除以零,因此单元测试应该失败 - 但由于针对接口 ICalculator 进行测试,测试成功。
你能帮我理解吗?它有什么意义,不是测试代码而是测试接口?
在此先感谢迈克尔