2016-05-27 7 views
1

Я использую JMockit издеваться классу зависимого NeedToBeMockedClassНет конструктор в тестируемом классе, которые могут быть удовлетворены имеющимися инъекционными

public class ClassToBeTested{ 

private NeedToBeMockedClass needToBeMockedObj; 

public ClassToBeTested(String a, boolean b){ 
    needToBeMockedObj = new NeedToBeMockedClass(String x, int y); 
} 

public String helloWorld(String m, String n){ 
    // do smething 
    needToBeMockedObj.someMethod(100, 200); 
    // do smething more 

    } 
} 

Test Case

@Tested 
private ClassToBeTested classUnderTest; 

@Injectable 
NeedToBeMockedClass mockInstance; 

@Test 
public void testHelloWorld(){ 

new NonStrictExpectations(classUnderTest) { 
     { 
      Deencapsulation.invoke(mockInstance, "someMethod", withAny(AnotherClassInstance.class), 200); 
      result = true; 
     } 
    }; 
//verification  
} 

Я получаю ниже исключения

java.lang.IllegalArgumentException: No constructor in tested class that can be satisfied by available injectables 

Похоже, что я не инициализирую экземпляр класса, который необходимо протестировать и которые нужно издеваться.

+0

Я незнаком с JMockit, но это, кажется, что вы засыхаете нужно издеваться аргументами конструктора или экземпляр класса испытываемых вручную (новой и предоставить аргументы конструктора в этой точке. –

ответ

2

Инъекционные издевательства предназначены для передачи в тестируемый код. Код ClassToBeTested не позволяет передавать экземпляр зависимостей через конструктор или метод. Вместо этого вы должны просто аннотировать NeedToBeMockedClass с помощью @Mocked, а затем указать поведение в блоке ожидания. Аннотирование @Mocked издевается над любым экземпляром NeedToBeMockedClass, выполненным в тестируемом коде.

@Test 
public void testHelloWorld(@Mocked final NeedToBeMockedClass mockInstance){ 

    new NonStrictExpectations() { 
     { 
      mockInstance.someMethod(anyInt, anyInt); 
      result = true; 
     } 
    }; 

    ClassToBeTested classToBeTested = new ClassToBeTested("", true); 
    String result = classToBeTested.helloWorld("", ""); 

    //Assertions, verifications, etc. 
}