【发布时间】:2020-10-16 02:00:26
【问题描述】:
我尝试在下面的课程中进行测试,但得到了“org.mockito.exceptions.base.MockitoException: 只有 void 方法可以 doNothing()!”,当我尝试 Mocking 时,我得到了 nullpointerException。
@Configuration
@Profile("cloud")
public class PsqlConfiguration extends AbstractCloudConfig {
@Bean
public DataSource dataSource() {
return connectionFactory().dataSource();
}
}
笔试 =>
@RunWith(MockitoJUnitRunner.class)
class PsqlConfiguration extends AbstractCloudConfig{
@Test
void dataSource() {
PsqlConfiguration ch = Mockito.spy(new PsqlConfiguration());
Mockito.doNothing().when((AbstractCloudConfig)ch).connectionFactory();
ch.dataSource();
}
模拟测试书面
@RunWith(MockitoJUnitRunner.class)
类 PsqlConfigurationTest {
@InjectMocks
PsqlConfiguration psqlConfiguration = new PsqlConfiguration();
AbstractCloudConfig config = Mockito.mock(AbstractCloudConfig.class);
@Test
void dataSource() {
DataSource dataSource = Mockito.mock(DataSource.class);
Cloud cloud = Mockito.mock(Cloud.class);
ServiceConnectionFactory factory = new CloudServiceConnectionFactory(cloud);
Mockito.when(config.connectionFactory()).thenReturn(factory);
System.out.println(config.connectionFactory());
Mockito.when(config.connectionFactory().dataSource()).thenReturn(dataSource);
assertNull(psqlConfiguration.dataSource()); // This gives null
}
}
【问题讨论】:
-
为什么?为什么你还要为你的配置写一个测试并模拟它?无论如何,
doNothing意味着它不会返回任何东西,并且该方法显然应该返回一些东西。所以你可能想返回一个模拟或间谍:baeldung.com/mockito-behavior -
我尝试过模拟,但它给出了 Nullpointer 异常。我知道普通模拟,但它对超类的工作方式相同吗?
-
你能添加这个测试的意图吗?你到底想测试什么?我看不到任何与超类相关的内容
-
您好,如果我直接模拟子类方法,那么它可以工作,但代码覆盖率为 0%,所以我想模拟“connectionFactory().dataSource()”。所以它给出了 100% 的代码覆盖率,但是它给出了 NullPointerException
标签: java junit5 spring-boot-test