我正在参与一个项目,其中涉及一个“服务”类和一种充当门面的“客户端”(不知道是否是设计模式世界中的正确术语,但我会尽力让自己清晰明了)。由于“服务”类的方法可能需要与一个或多个数据库进行通信、进行长时间的检查等等,因此每个“客户端”方法都应该调用一个且仅一个“服务”方法。
“服务”类的结构大致如下:
在
谢谢你提前回答。
总之,可能的重复没有解决我的问题。
有另一个问题:我正在为另一个团队编写的代码编写测试,而我自己并没有遵循TDD流程,因此我的测试应该更加谨慎,正如this article所述,该文章在mockito文档中引用了verifyNoMoreInteractions。我正在测试的方法通常非常长,因此我需要检查被测试的方法是否仅调用必要的服务而不是其他服务(因为它们很昂贵,如我所说)。也许
“服务”类的结构大致如下:
public class Service {
public void serviceA(){...}
public SomeObject serviceB(){...}
// can grow in the future
}
而且Client
应该是类似这样的东西
public class Client {
private Service myService; // Injected somehow
public void callServiceA() {
// some preparation
myService.serviceA();
// something else
}
public boolean callServiceB(){...}
}
在 Client
的测试类中,我希望有类似以下的内容:
public class ClientTest{
private Client client; // Injected or instantiated in @Before method
private Service serviceMock = mock(Service.class);
@Test
public void callServiceA_onlyCallsServiceA() {
client.callServiceA();
????
}
}
在
????
部分,我想要类似verifyOnly(serviceMock).serviceA()
这样的东西,它表示:"验证只调用了serviceMock.serviceA()
一次,并且没有调用过Service
类的其他方法"。在Mockito或其他Mocking库中是否有类似的功能?我不想为每个方法都使用verify(serviceMock, never()).serviceXXX()
,因为正如我所说,Service
类可能会在未来增长,我将不得不为每个测试添加验证(对我来说不是一件愉快的任务),所以我需要更通用的东西。谢谢你提前回答。
EDIT #1
这篇文章和possible duplicate之间的区别在于,答案添加了不需要的模板代码,而这在我的情况下不是期望的,因为这是一个非常大的项目,我必须尽可能少地添加代码。
此外,即使在每个测试中都不鼓励使用,verifyNoMoreInteractions 也可以是一个很好的选择,无需额外的样板代码。总之,可能的重复没有解决我的问题。
有另一个问题:我正在为另一个团队编写的代码编写测试,而我自己并没有遵循TDD流程,因此我的测试应该更加谨慎,正如this article所述,该文章在mockito文档中引用了verifyNoMoreInteractions。我正在测试的方法通常非常长,因此我需要检查被测试的方法是否仅调用必要的服务而不是其他服务(因为它们很昂贵,如我所说)。也许
verifyNoMoreInteractions
现在已经足够好了,但我想看到一些不被同一API创建者团队每次测试都不鼓励的东西!希望这有助于澄清我的观点和问题。最好的问候。