Тестирование переданного значения .. не только возвращаемого значения - PullRequest
0 голосов
/ 13 мая 2011

Итак, у меня есть класс, который выглядит следующим образом.

@Inject
AnotherClass anotherClass;

public class Foo {
    public Boolean someMethod(){
         Holder<Boolean> booleanHolder = new Holder<Boolean>();
         //I have no control over this method, but I need it to set booleanHolder
         anotherClass.anotherMethodCall(booleanHolder, Boolean.TRUE);

         return booleanHolder.value;  
    }
}

Я пытаюсь протестировать метод.Что кажется чертовски невозможным.У меня есть еще один класс по издевательству.Но я могу только сказать, какая переменная передана. Или сказать, что должен возвращать anotherMethodCall.

Я хочу установить, каким будет booleanHolder после вызова метода.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 13 мая 2011

Моя проблема была в том, как я использовал mockito.Я указывал на неправильное значение.Если кому-то интересно, как это работает.

public void test_someMethod(){
    Foo myClass = new Foo();
    AnotherClass mockClass = mock(AnotherClass.class);
    final Boolean testBool;
    when(anotherClass.anotherMethodCall((Holder)anyObject(),anyBoolean()).thenAnswer(new Answer(){
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                Object[] args = invocation.getArguments();
                Holder<Boolean> newHolder = (Holder<Boolean>) args[0];
                newHolder.value = testBool;
            }
        }

     Boolean retBool = myClass.someMethod();

     assertTrue(retBool);
 }

По понятным причинам это не совсем то, что я делаю.Но это отличный обобщенный случай.

0 голосов
/ 13 мая 2011

Есть ли в классе Holder метод доступа (предположительно, с шаблоном), чтобы вы могли получить значение, которое он содержит после вызова, а затем выполнить assert () для этого значения? Я предполагаю, что у вас есть тестовая версия «внешнего» метода, который вызывает другой метод с параметром эмуляции «по ссылке».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...