具有自动装配注释的AbstractClass Junit

时间:2018-09-13 10:23:06

标签: java spring junit mocking mockito

我有一个抽象类,其中使用@Autowired批注。 我正在尝试使用MockitoJUnitRunner编写junit。

@RunWith(MockitoJUnitRunner.class)
public class AbstractAdminSearchServiceTest {

 @Mock
 private IUPSService upsService;

 Map<String,String> map;

  @Before
    public void setUp() {
      map=new HashMap<>();
    }

 @Test
 public void testSearchAdministratorsForIndividualNotification(){
     AbstractAdminSearchService 
 mock=Mockito.mock(AbstractAdminSearchService.class,
             Mockito.CALLS_REAL_METHODS);
     when(upsService.getUsersProfile(buildUserIds(),new String[] 
{})).thenReturn(map);
     mock.searchAdministratorsForIndividualNotification(buildSolrUsers(), 
"");

 }

@Mock不起作用,'upsService'也没有被嘲笑。 结果,当实际调用upsService.getUsersProfile时,我得到了NullpointerException。

1 个答案:

答案 0 :(得分:1)

基本上我们不会为抽象类编写Junit,因为我们不能为它们创建对象,如果它是普通的具体类而不是  下面的代码

mock=Mockito.mock(AbstractAdminSearchService.class,
Mockito.CALLS_REAL_METHODS);

使用

@InjectMocks
private AbstractAdminSearchService mock;

然后所有模拟都将插入到真实对象中