我正在尝试使用固执方法来实现单元测试。但是,当我使用该方法时,没有测试类的线覆盖范围。
服务类
@Service
@Slf4j
public class Service {
@Autowired
private Client client;
private String doclinkUrl = "www.website.com"
public byte[] downloadContent(String objectId) {
String url = doclinkUrl + "documents/" +objectId + "/binary";
return client.target(url).request().get(byte[].class);
}
}
固定服务类
public class ServiceStub extends Service {
@Override
public byte[] downloadContent(String objectId) {
return "test".getBytes();
}
}
测试服务类
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@InjectMocks
private Service testee;
@Test
public void testDownloadContent(){
testee = new ServiceStub();
Assert.assertNotNull(testee.downloadContent("objectId"));
}
}
单元测试中的子键是指时您不希望它干扰的依赖项。
确实,您想单位测试组件行为,并模拟或固执,可能对其副作用。
在这里,您将测试的课程存根。这个不成立。
但是,当我固执时,没有线覆盖 测试的课程。
执行使用ServiceStub
实例的测试不会在单位测试Service
代码方面覆盖。
在Service
类中
@Autowired
private Client client;
因此您可以模拟或固执。
如果您使用的是弹簧靴,则可以进行集成测试大部分零件,并且仅使用@MockBean
@SpringBootTest
@RunWith(SpringRunner.class)
public class ServiceTest {
@Autowired
private Service service;
@MockBean
private Client client;
@Test
public void testDownloadContent(){
//given(this.client.ArgumentMatchers.any(url) //addtional matchers).willReturn(//somebytes);
service = new ServiceStub();
Assert.assertNotNull(testee.downloadContent("objectId"));
}
}