У меня очень сложный класс для написания тестового примера Junit. Я решил использовать PowerMockito, так как мой класс, для которого должен быть запущен тест, имеет инициализацию конструктора.Ошибка PowerMockito с использованием InjectMocks
Мой главный класс, как это:
public class MainClass extends BaseClass{
MainClass(SomeClass class){
super(class);
}
public void methodToBeTested(){
some code here
}
..few other methods which I am not going to test.
}
Теперь я тестовый пример написан так:
@RunWith(PowerMockRunner.class)
public class TestClass{
@Mock
OtherClassUsedInMainClass mock1;
@Mock
OtherClassUsedInMainClass mock2;
@InjectMocks
MainClass mainClass;
@Before
public void setUp() throws Exception{
MockitoAnnotations.initMocks(this);
PowerMockito.whenNew(MainClass.class).withArguments(Mockito.any(SomeClass.class))
.thenReturn(mainClass);)
}
@Test
public void testMethodtobeTested(){
...I am using the other objects to mock data and test if this method works fine
mainClass.methodtobeTested();
\\This method will increment a value. I am just asserting if that value is right.
Assert.assertEquals(mainClass.checkCount(),RequiredCount)
}
}
Я получаю исключение в нулевой указатель при выполнении TestCase поскольку оно пытается инициализировать mainclass . Это не издевается. Я знаю, что делаю что-то неправильно. Но я просто не знаю, что это.
Ошибка:
org.mockito.exceptions.base.MockitoException:
Cannot instantiate @InjectMocks field named 'mainClass' of type 'class com.main.MainClass'.
You haven't provided the instance at field declaration so I tried to construct the instance.
However the constructor or the initialization block threw an exception : null
Caused by: java.lang.NullPointerException
This null pointer exception is thrown from a the constructor of the BaseClass when it tries to initialize another class.
Показать конструктор BaseClass. Там вы получите сообщение об ошибке – Jens
Почему вы стучите по MainClass? Разве это не тот класс, который вы тестируете? –
@Jens Конструктор базового класса принимает someClass, переданный из mainClass в качестве аргумента. Он также использует этот someClass и использует его для инициализации нескольких других классов, которые также имеют конструктор, который использует someClass. – v1shnu