Исключение NullPointerException при издевательстве над методом dao

#java #junit #mockito #jmockit

#java #junit #mockito #jmockit

Вопрос:

Я начал писать тестовый класс для своего Java-Spring-project. Я использую JUnit и Mockito, но независимо от того, что я делаю, я всегда получаю исключение NullPointerException для приведенного ниже утверждения.

 assert((dao.getAllBusinessRules(sourceSystemIdentifier)).size()>=0);
  

Вот мой основной класс

 
Public class   BusinessRulesDao   extends   SimpleDaoImpl‹BusinessRules>
{
static  f1naI    String   GET_BUSINESS_RULES=“se1ect className, fileName , sourceSystemldentifier from Business_Rules where sourceSystemIdentifier=?”;

public List<BusinessRules> getAllBusinessRules(String sourceSystemIdentifier) {
SQLParameter param = new SQLParameter(Types.VARCHAR, "sourcesystemldentifier", sourceSystemtIdentifier);
List<BusinessRules› list = null;
ArrayList<IDBParameter> params = new ArrayList<IDBParameter›();
params.add(param) ;
1ist = this.query(GET_BUSINESS_RULES, params);
return list;
}
  

Вот мой тестовый класс

 public  class BusinessRulesDaoTest {
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}

BusinessRulesDao dao =Mockito.mock(BusinessRulesDao.class);
@Mock
BusinessRules rules;
SimpleDaoImpl<BusinessRules> impl=Mockito.mock(SimpleDaoImpl.class);

@Before
Public void setUp()
{
    this.rules=new BusinessRules();
    this.dao =new BusinessRulesDao();
    assert(this.dao!=nullamp;amp;this.rules!=null);
}
@Test
Public void getAllBusinessRulesTest()
{
String sourceSystemIdentifier=”ssi”;
String sql=”sql”;
ArrayList<IDBParameter> params=new ArrayList<IDBParameter>();
List<BusinessRules> list = new ArrayList<>();
When(dao.getAllBusinessRules(anyString()).thenReturn(list);
When(impl.query(sql,params)).thenReturn(list);
list.add(rules);
assert((dao.getAllBusinessRules(sourceSystemIdentifier)).size()>=0);
}
}
  

Комментарии:

1. Вот ваша проблема — this.impl=new SimpleDaoImpl< BusinessRules>(); это был макет, пока вы не сделали это с ним!

2. Я попытался прокомментировать это. Но тест не перейдет в основной метод, и я вижу нулевое покрытие после теста.

3. Ну, ты пытаешься издеваться над этим классом или нет? Если это класс, который вы тестируете, то вам вообще не следует издеваться над ним. Но если вы тестируете какой-то другой класс, который взаимодействует с ним, то макет может быть именно тем, что вам нужно.

4. Я просто хочу протестировать только класс BusinessRulesDao, и мне также нужно получить 100% покрытие. Я попытался протестировать, прокомментировав это.impl=new SimpleDaoImpl< BusinessRules>(); Теперь я получаю исключение nullpointer в assert((dao.getAllBusinessRules(sourceSystemIdentifier)).size()>= 0); .

5. это не jmockit