1

这是代码:

我知道默认情况下,下面的代码将 Button 的默认行为覆盖为 Mock 对象。所以它不会工作。我坚持这一点。

用这样的现有视图通过测试的最佳实践是什么?我怎样才能在这样的匿名内部类中运行那一小部分视图?我怎样才能模拟点击事件,但同时保持代码不变。

  1. 我不想有一个单独的吸气剂,只是为了调用 button.click() 方法


    import com.google.gwt.event.dom.client.ClickEvent;
    import com.google.gwt.event.dom.client.ClickHandler;
    import com.google.gwt.user.client.ui.Button;
    import com.google.gwt.user.client.ui.FlowPanel;
    import com.google.gwtmockito.GwtMock;
    import com.google.gwtmockito.GwtMockitoTestRunner;
    import org.junit.Assert;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.invocation.InvocationOnMock;
    import org.mockito.stubbing.Answer;

    import static org.mockito.Matchers.any;
    import static org.mockito.Mockito.when;


    @RunWith(GwtMockitoTestRunner.class)
    public class ExceptionTest {

        @GwtMock
        private ClickHandler clickHandler;

        @GwtMock
        private Button btn;

        private GUI gui;

        @Before
        public void setUp() {
            when(btn.addClickHandler(any(ClickHandler.class))).thenAnswer(new Answer() {
                public Object answer(InvocationOnMock aInvocation) throws Throwable {
                    clickHandler = (ClickHandler) aInvocation.getArguments()[0];
                    return null;
                }
            });

            gui = new GUI();
        }

        @Test
        public void runner() {
            clickHandler.onClick(new ClickEvent(){});
            Assert.assertEquals(1, gui.getSize());
        }
    }

图形用户界面.java



    class GUI extends FlowPanel {
        private final Button button = new Button("OK");
        private int size;

        public GUI() {
            button.addClickHandler(new ClickHandler() {
                @Override
                public void onClick(ClickEvent clickEvent) {
                    size += 1;
                }
            });
        }

        public int getSize(){
            return this.size;
        }
    }
4

0 回答 0