JMockit을 사용하여 동작 테스트를 수행하려고합니다. 테스트 중 하나에서 최종 객체에서 메소드를 호출해야합니다. 그러나 최종 개체가 초기화되지 않은 (null 개체) 및 테스트에서 초기화하는 방법을 모릅니다 (최종 정의 된 이후). 클래스에서 최종 인스턴스를 조롱하는 솔루션을 찾을 수 없습니다. 먼저 테스트를보고 코드를 설명 할 것입니다. nc.requestSimilarEntries 호출 한 후에 NRH은 NC (NetworkClient 클래스)와 nc.nrh.sendRequest 정의 마지막 인스턴스이다JMockit을 사용하여 클래스에서 최종 인스턴스 변수를 모의하는 방법
public class NetworkClientTest {
@Cascading @Capturing ServerRequestHandler nrh;
@Test
public void testRequestSimilar(){
//define test parameters
String smiles = "abcd";
float t = (float) 0.1;
final Map<String, Object> parameters = new HashMap<String, Object>();
String smi = StringEscapeUtils.unescapeJava(smiles);
parameters.put("smiles",smi);
parameters.put("tanimoto", t);
//end define test parameters
//try to initialize NetworkClient object
new MockUp<NetworkClient>() {
@Mock
public void $init(){
}
};
NetworkClient nc = new NetworkClient();
new Expectations(){
//ServerRequestHandler nrh;
{
nrh.sendRequest("get_similar_entries", parameters);
}
};
//when nc.requestSimilarEntries is called, nc.nrh.sendRequest will be expected.
nc.requestSimilarEntries(smiles, t);
}
가 호출된다.
public class NetworkClient {
private final ServerRequestHandler nrh = new ServerRequestHandler();
...
public void requestSimilarEntries(String smiles, float tanimoto) {
// Set up parameters
Map<String, Object> parameters = new HashMap<String, Object>();
String smi = StringEscapeUtils.unescapeJava(smiles);
parameters.put("smiles",smi);
parameters.put("tanimoto", tanimoto);
// Send a request to the handler
nrh.sendRequest("get_similar_entries", parameters);
}
문제는 테스트에서 초기화 된 마지막 ServerRequestHandler nrh를 가져올 수 없다는 것입니다. 테스트 결과에 '누락 된 호출'이 표시됩니다. 나는 디버그 모드 (이클립스에서)에서 체크하고 nc.nrh는 항상 null이다.
자세한 정보가 필요하면 알려주세요. 도움을 주셔서 감사합니다.
예, 감사합니다. 이것은 문제를 완벽하게 해결했습니다. – jgmao
'MockUp'는 필요하지 않으므로 간단히 제거하십시오. 일반적으로 테스트중인 클래스는 모의하지 않습니다. –