2015-06-30 6 views
0

Это определение моего класса:Junit Осмеяние 2 методов

class A 
{ 
    public b method1() 
    { 
     //some code 
    } 
} 

class Z 
{ 
    A a = new A(); 
    public c method2() 
    { 
     z = a.method1(); 
     //some code validating z 
    } 
} 

Я хочу проверить method2 с помощью JUnit. Метод method1() в методе2() должен возвращать действительный z. Как мне идти дальше?

+0

Вы имели в виду, что хотите издеваться над методом ** 1 ** ??? Вы не должны издеваться над методом, который хотите проверить ... – Codebender

+0

Если вы хотите протестировать некоторый метод с помощью mockito, это лучше, что сделает вас новым классом и сделайте правильные ановативы, не забудьте импортировать JAR. Вот пример. Однако, я никогда не видел насмешливый метод вроде. @mock public void {}; –

+0

http://www.adictosaltrabajo.com/tutoriales/mockito-example/ –

ответ

0

Что должно быть b, c и z быть в вашем образце-коде?

Обычно вы издеваетесь над любыми другими объектами, которые вызывает ваш метод, находящийся под тестом, или требуемые объекты, например, f.e. a.method1() вызова может быть издевался, как это:

// Arrange or given 
Z sut = new Z(); 
Object method1RetValue = new Object(); 
A mockedA = mock(A.class); 
Mockito.when(mockedA.method1()).thenReturn(method1RetValue); 

// set the mocked version of A as a member of Z 
// use one of the following instructions therefore: 
sut.a = mockedA; 
sut.setA(mockedA); 
Whitebox.setInternalState(sut, "a", mockedA);  

// Act or when 
Object ret = sut.method2(); 
// Assert or then 
assertThat(ret, is(equalTo(...))); 

Как a является членом вашего теста-класса, вам нужно будет установить высмеивала версию первых, хотя, либо путем прямого присвоение поля, инкубационных-методы или с помощью Whitebox.setInternalState(...), как изображенный в приведенном выше примере кода.

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

+0

Спасибо Roman! Но предположим, что «z» является сложным типом данных и не может использоваться как «method1RetValue». Он должен быть вычислен с использованием фактического вызова. Я видел Mocktio.when (mockedA.method1()). ThenRealMethodCall() сортирует функции, но не работает. Не могли бы вы мне помочь? –

+0

Если вы хотите вызвать реальный вызов метода, просто используйте 'spy (new A())' вместо 'mock (A.class)' f.e. Если 'method2()' однако должен возвращать полностью инстанцированный объект типа 'Z', вы должны рассмотреть возможность возврата фальшивого объекта, который вы заполняете данными, необходимыми для теста, вместо реального объекта. Помните, что unit-тесты просто проверяют логику в тестируемом методе - ничего больше, не меньше. Если вы хотите проверить, что реальные объекты играют вместе, как ожидалось, рассмотрите возможность внедрения интеграции или даже сквозного теста –

Смежные вопросы