我使用NMock2,并且我已经起草了以下NMock类来表示一些常见的模拟框架概念:
Expect:这指定了一个模拟方法应返回的内容,并说必须进行调用或测试失败(当伴随调用时VerifyAllExpectationsHaveBeenMet()).
Stub:this指定模拟方法应返回的内容,但不能导致测试失败.
那我该怎么做呢?
我想使用 GoMock 来测试一些代码,而不是将我的测试与被测事物的实际实现太紧密地结合起来。但 GoMock 似乎要求我能够提前准确地说出被测试的代码将进行什么调用,即使这不是我要测试的合约的一部分。有没有解决的办法?
例如,假设我正在测试一些验证逻辑,其中被测代码需要采用命名Widget,mockedObject如果mockedObject.CheckConditionA()或mockedObject.CheckCondition1()返回 false,则返回 false,否则返回 true。一种正确的实现是:
func UnderTest(mockedObject *Widget) bool {
if !mockedObject.CheckConditionA() {
return false
}
return mockedObject.CheckCondition1()
}
Run Code Online (Sandbox Code Playgroud)
另一个是:
func UnderTest(mockedObject *Widget) bool {
if !mockedObject.CheckCondition1() {
return false
}
return mockedObject.CheckConditionA()
}
Run Code Online (Sandbox Code Playgroud)
第三个是:
func UnderTest(mockedObject *Widget) bool {
cA := mockedObject.CheckConditionA()
c1 := mockedObject.CheckCondition1()
return cA && c1
}
Run Code Online (Sandbox Code Playgroud)
第四个是:
func UnderTest(mockedObject *Widget) bool {
if TodayIsAnAlternateTuesday() {
return mockedObject.CheckCondition1() && mockedObject.CheckConditionA()
}
return mockedObject.CheckConditionA() && …Run Code Online (Sandbox Code Playgroud)