在我的java spring mvc应用程序中,我在junit测试中遇到NullPointerException,所有类都位于某个包中,我在setLayerType(View.LAYER_TYPE_SOFTWARE, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.OVERLAY));
方法
main
然后在@SpringBootApplication
@ComponentScan({ "com.example.model" })
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
我有以下类,接口:
com.example.model
实施如下:
public interface DataService {
int[] retrieveAllData();
}
然后我在另一个类中使用了以下服务:
@Service
public class DataServiceImpl implements DataService {
@Override
public int[] retrieveAllData() {
return new int[] { 1, 2, 3, 4 };
}
}
我写了一个测试来检查public class SomeBussiness {
@Autowired
DataServiceImpl dataService;
public int findTheGreat() {
int[] res = dataService.retrieveAllData();
return res[0];
}
}
类中的findTheGreattest()
:
SomeBussiness
但它在{/ 1>}行中抱怨
public class SomeBussinessTest {
@Test
public void findTheGreatTest() {
SomeBussiness sbi = new SomeBussiness();
int res = sbi.findTheGreatest();
assertEquals(1, res);
}
}
但是,我使用NullPointException
,int[] res = dataService.retrieveAllData();
注入了@Service
我该如何解决?
更新
我添加了@Autowiered
dataService
类:
@Service
然后添加更改测试,如下所示:
SomeBussiness
现在它抱怨:
@Service
public class SomeBussiness {
@Autowired
DataServiceImpl dataService;
public int findTheGreat() {
int[] res = dataService.retrieveAllData();
return res[0];
}
}
答案 0 :(得分:0)
您的班级中的自动装配永远不会被触发。首先,您需要一个初始化所有测试类的JUnit运行器。此外,您必须通过此跑步者创建受测试的课程,而不是通过调用' new'来创建它:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {DemoApplication.class})
public class SomeBussinessTest {
@Autowired
SomeBussiness sbi;
@Test
public void findTheGreatTest() {
int res = sbi.findTheGreatest();
assertEquals(1, res);
}
}
答案 1 :(得分:0)
因为新关键字。当你使用new创建一个实例时,不会发生spring的依赖注入,你必须确保通过构造函数或setter传递依赖项。
@Test
public void findTheGreatTest() {
SomeBussiness sbi = new SomeBussiness();
sbi.setDataService(dbService);
int res = sbi.findTheGreatest();
assertEquals(1, res);
}
使用SpringRunner
:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class SomeBussinessTest {
@Autowired
SomeBussiness sbi;
@Test
public void findTheGreatestTest() {
assertEquals(1, sbi.findTheGreatest());
}
}
这篇文章清楚地解释了新关键字的作用: