我试图验证一个模拟的方法(fileSenderService.sendFile
)被调用了2次。不管出于什么原因,Mockito从来没有失败过测试,不管期望调用的次数是多少。我是这样使用它的:
verify(mockService,times(expectedNumberOfInvocations))。sendFile(any(String.class)、any(byte[].class))
无论我在times()方法中使用什么值,测试都会通过。
MyService看起来像这样:
@Service
public class MyServiceImpl implements MyService {
@Autowired
private FileSenderService fileSenderService;
public void createAndSendFiles(){
//doSomeStuff, prepare fileNames and fileContents(byte arrays)
//execute the sendFile twice
fileSenderService.sendFile(aFileName, aByteArray); //void method; mocked for testing
fileSenderService.sendFile(bFileName, bByteArray); //void method; mocked for testing
}
考试班
@RunWith(SpringRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = {Application.class, FileSenderServiceMock.class})
@ContextConfiguration
public class MyServiceTest{
@Autowired
private MyService myService;
@Autowired
FileSenderService mock;
@Test
public void shouldCreateAndSendFiles(){
myService.createAndSendFiles(); //inside this method sendFile() is called twice
verify(mock, times(999)).sendFile(any(String.class), any(byte[].class)); //THE PROBLEM - why times(999) does not fail the test?
}
}
FileSenderService及其模拟:
@Service
public class FileSenderServiceImpl implements FileSenderService {
@Override
public void sendFile(String name, byte [] content) {
//send the file
}
}
//used for testing instead of the actual FileSenderServiceImpl
public class FileSenderServiceMock {
@Bean
@Primary
public FileSenderService getFileSenderServiceMock(){
FileSenderServicemock = Mockito.mock(FileSenderService.class, Mockito.RETURNS_DEEP_STUBS);
doNothing().when(mock).sendFile(isA(String.class), isA(byte[].class));
return mock;
}
如果您使用@SpringBootTest
作为集成测试用例,您不需要为mock定义任何测试配置类,您可以简单地使用@MockBean注释将mock注入测试上下文
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest{
@Autowired
private MyService myService;
@MockBean
FileSenderService fileSenderService;
@Test
public void shouldCreateAndSendFiles(){
myService.createAndSendFiles();
verify(fileSenderService, times(2)).sendFile(any(String.class), any(byte[].class));
}
}
我正在尝试测试,只有在调用case的情况下,否则不会调用该方法。 但这会调用我的,并在内抛出空指针。因为我的行为不会调用,所以我如何在不调用的情况下测试它。
我在SUT中有这段代码: 我知道模型不会为空,因为模型已经存在。因此,我希望不应该与model一起调用。因此,我需要某种的方法,以确保该方法不是用此参数调用的。现在我知道了如何进行相反的操作:如何确保/验证或任何方法本身是在的帮助下用参数调用的,但不确定当前的场景。请帮帮忙。 谢谢
玩弄Mockito来实现我的服务的单元测试,但由于某种原因,我无法通过我的厚脑袋来实现这一点。我的考试通过了,但我不能确信我做得对。 下面是一个测试count()方法的示例。该方法只是将调用转发到它的存储库,我不想验证仅此而已,没有其他事情发生。这就是我得到的: 我的考试及格了,但我有一些问题。 > 我需要验证吗?我觉得我这样做是因为我想验证personRepository。实际上调用了count
问题内容: 我正在使用Mockito编写我的测试用例。我有一个简单的类,其中包含我要测试的功能: 在单元测试中,我要测试功能: 在我的测试案例中,如何使用Mockito进行检查/验证? 问题答案: 您将不得不使用间谍。这里的问题是您要验证是否在 真实 对象而非模拟对象上调用了方法。您不能在此处使用模拟,因为它将对类中的所有方法进行存根,因此缺省情况下也对存根不执行任何操作。 但是,请注意,使用间谍
我正在尝试使用开源用户管理服务,比如KeyClope。构建一个angularJs应用程序,该应用程序将向由KeyClope保护的RESTendpoint发送HTTP请求。我在后端使用spring boot。我能够调用endpoint并得到结果,这应该是不可能的,因为它会阻止来自未经授权来源的请求。 这是我遵循的两个链接 带角和Spring靴的钥匙斗篷 2.Github链接到KeyClope示例 由
我有一个配置了Spring安全性的Spring启动应用程序。我已将登录请求重定向到我在 python 服务器上运行前端的 。现在,当我尝试将登录名发布到我的 springboot 应用程序时,它不起作用。即使我从邮递员那里尝试,它也说 错误。我怎样才能让它工作。如果我将其作为 html 放在同一个项目中,而不是从 python 服务器或邮递员中,它就可以从 /login 工作。有什么区别。 “消息