Чем люблю проект выходного дня - тем, что тут я могу рефакторить без конца и придумывать новые комбинации строк кода, порой даже нелепые. Это все позволяет мне знать как можно, а как не стоит. Сейчас я предложу пример того как можно было бы, но не стоит :)
Пишу на ночь глядя эмулятор КР580ВМ80 - ну такое, just for fun. Конечно же по ТДД. Тесты рефакторю, как положено. И вот я в тесте пишу как-то так ассерт
Проверил, может ли такое Mockito. Оказалось может!
Пишу на ночь глядя эмулятор КР580ВМ80 - ну такое, just for fun. Конечно же по ТДД. Тесты рефакторю, как положено. И вот я в тесте пишу как-то так ассерт
assertEquals("DEh", registry.m().toString());
При том, что
public class ProcessorTest {
private Memory memory;
private Processor processor;
private Registry registry;
@Before
public void setup() {
memory = mock(Memory.class);
processor = new Processor(memory);
registry = processor.registry();
}
а интерфейс
public interface Registry {
AByte b();
AByte c();
AByte d();
AByte e();
AByte h();
AByte l();
AByte m();
AByte a();
}
а AByte содержит че-то умное и toString.
Но мне хотелось выпендрится и сделать вот так в тесте, чтобы на at(). вываливались аутокомплитером IDE методы интерфейса RegistryПроверил, может ли такое Mockito. Оказалось может!
private RegistryAssert assertValue(String data) {
return new RegistryAssert(data);
}
class RegistryAssert {
private String data;
public RegistryAssert(String data) {
this.data = data;
}
public Registry at() {
// создаем шпиона для registry
Registry spy = spy(registry);
// и следим за каждым его чихом
setup(spy).b();
setup(spy).c();
setup(spy).d();
setup(spy).e();
setup(spy).h();
setup(spy).l();
setup(spy).m();
setup(spy).a();
return spy;
}
private Registry setup(Registry spy) {
return doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Object actual = invocation.callRealMethod();
assertEquals(data, actual.toString());
return actual;
}
}).when(spy);
}
}
Не делайте так ☺


Комментариев нет:
Отправить комментарий