Чем люблю проект выходного дня - тем, что тут я могу рефакторить без конца и придумывать новые комбинации строк кода, порой даже нелепые. Это все позволяет мне знать как можно, а как не стоит. Сейчас я предложу пример того как можно было бы, но не стоит :)
Пишу на ночь глядя эмулятор КР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); } }Не делайте так ☺
Комментариев нет:
Отправить комментарий