我有以下ApplicationConfiguration
:@InjectMocks導致NPE
class ApplicationConfiguration {
private SQSConfig SQSConfig;
// Other configs and getters/setters
}
然後,我有我的Application
class Application {
private Dequeuer dequeuer;
public void run(ApplicationConfiguration config) {
// I need to pass ApplicationConfiguration because there are other variables that I need to use
dequeuer = new Dequeuer(config);
// Start dequeuer
}
}
所以在我的測試Application
,我想用@InjectMethod
爲Dequeuer
:
class ApplicationTest {
@Mock
private ApplicationConfig config;
@Mock
private SQSConfig sqsConfig;
@InjectMocks
private Dequeuer dequeuer = new Dequeuer(config);
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(config.getSQSConfig()).thenReturn(sqsConfig);
}
}
問題是,th e @InjectMethod
在when
之前被初始化,所以我得到了NPE。我該怎麼辦?
您發佈的代碼不會編譯。發佈**真實**代碼。 –
@JBNizet真正的代碼會很長。這個問題的關鍵是如果你需要更多的模擬而不是簡單的'MyClass myClass = mock(MyClass.class)',並且你需要使用'when'來設置你的模擬,那麼如何使用'@InjectMethod'。 – Kousha
我不是要求你真實的代碼。我要求提供真實的代碼來重現問題,並且是有道理的。您正在使用不存在的類,'新的Dequeuer(ApplicationConfiguration)'不是有效的Java代碼... –