我试图模拟一些方法调用,但不幸的是我一直返回null。你能帮我指出我可能出错的地方吗?我正在使用time(). thenBack(),我觉得我正确地模拟了返回变量。事先非常感谢。我是JUnit和Mockito的新手,所以如果我错过了任何明显的东西,我很抱歉。
ServiceTest.java
@IntegrationTest
public class ServiceTest extends TransactionalTest {
private HistoryService orderHistoryService;
private CMSSiteModel website;
@Mock
protected DefaultWebService orderDetailsServiceWrapper;
@Mock
protected WebsiteService websiteService;
@Before
public void setUp()
{
MockitoAnnotations.initMocks(this);
website = mock(CMSSiteModel.class);
}
@Test
public void testFindOrderDetailsByConfirmationNumber() {
when(websiteService.getCurrentSite()).thenReturn(website);
final ResponseType response = orderHistoryService.findOrderDetailsByConfirmationNumber(OrderTestUtils.CONFIRMATION_NUMBER, OrderTestUtils.LOCATION_NUMBER);
Assert.assertEquals("Incorrect Approver Name", OrderTestUtils.APPROVER_NAME, response.getApprovedByName());
}
Service.java
public class HistoryService implements OrderHistoryService {
@Autowired
private WebsiteService websiteService;
@Override
public OrderDetailsServiceResponseType findOrderDetailsByConfirmationNumber(String confirmationNumber, String locationNumber) {
CMSSiteModel test = websiteService.getCurrentSite(); //returning null
odsrHeader.setSource(test.getOrderSource());
}
}
下面是我的答案:[尝试在一个类中编写单元测试用例]
确保websiteService
是Service Class中的@Mock
。
我认为您假设Mockito会自动将Web站点服务注入到OrderHistoryService中。在Mockito执行此操作之前,需要使用InjectMocks对OrderHistoryService进行注释<代码>InjectMock将创建该类的一个普通实例,然后尝试用作为给定测试一部分创建的任何Mock或spy类填充其字段。
eg.
public class ServiceTest extends TransactionalTest {
@InjectMocks
HistoryService orderHistoryService;
@Mock
WebsiteService websiteService;
...
}
历史服务
中的websiteService
不是null
令人担忧。似乎在某个地方发生了其他注入,您最终得到了两个单独的模拟网站服务。一个在您的测试类中,另一个在历史服务
中。您似乎遗漏了相当多的测试类,因此很难确定实际发生了什么。
我不确定我是否滥用了基于交互的测试,或者我是否做了一些概念上的错误。我正在开发一个Spring Boot应用程序(Kotlin),我的测试使用的是Spock/Groovy。 我有一个正在测试的类,它调用另一个服务来查询信息。被测试的类应该缓存结果。但是,我不能用返回值模拟一个方法并检查调用的次数,因为当我添加调用检查时,被模拟的方法总是返回null。 我创建了一个独立的示例,演示了这个问题。 前两
最简单的例子:我有以下方法: 我想模拟此方法以返回传递的参数作为结果。例如: 我知道我可以硬编码这种行为,但我希望它是通用的。
公共方法getA()的测试按预期工作,但私有方法getB()的测试不返回模拟值“b”,而是返回与方法getB()的实际返回值相对应的“b”。必须如何调整对getB()的测试,以便返回模拟值“b”?
问题内容: 我有一类这样的方法: 我如何在另一个类中调用此方法? 问题答案: 1. 如果要从中调用该方法的类位于同一包中,则创建该类的实例并调用该方法。 2. 使用 3. 最好有个赞等等。 例如:
我实现了一个模拟ExecutorService来立即返回结果,而无需创建线程: 问题是它总是返回相同的[mocked]Future对象。我需要根据传递给执行器的可调用对象返回Future mock的新实例ServiceMock.submit()我尝试使用PowerMock.expectNew(Future.class),但它抱怨“在类'java.util.concurrent.Future'中找不