1

コードは次のとおりです。

デフォルトでは、以下のコードが Button as 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());
        }
    }

GUI.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