0

Jukitoを使用して GWTP プレゼンターをテストしていますが、名前付きバインディングが機能しないようです。

ログイン ウィジェットをテストできるようにしたいonReveal()ので、ログインしているウィジェットとログインしていないウィジェットのコピーを提供する必要がありCurrentUserDtoます。これは私がやろうとしていることです:

@RunWith(JukitoRunner.class)
public class LoginWidgetPresenterTest
{
    public static class Module extends JukitoModule
    {
        @Override
        protected void configureTest()
        {
            bind(CurrentUserDto.class).annotatedWith(Names.named("loggedIn")).toProvider(LoggedInUserProvider.class);
            bind(CurrentUserDto.class).annotatedWith(Names.named("loggedOut")).toProvider(LoggedOutUserProvider.class);

            // these don't work either:
            // bindNamed(CurrentUserDto.class, "loggedIn").toProvider(LoggedInUserProvider.class);
            // bindNamed(CurrentUserDto.class, "loggedOut").toProvider(LoggedOutUserProvider.class);
        }

        public static class LoggedInUserProvider implements Provider<CurrentUserDto>
        {
            @Override
            public CurrentUserDto get()
            {
                CurrentUserDto currentUser = new CurrentUserDto(true, 100L); // isLoggedIn, userId
                currentUser.setEmail("john@example.com");
                currentUser.setNickname("john");
                currentUser.setLogoutUrl("#logout");

                return currentUser;
            }
        }

        public static class LoggedOutUserProvider implements Provider<CurrentUserDto>
        {
            @Override
            public CurrentUserDto get()
            {
                CurrentUserDto currentUser = new CurrentUserDto(false, null); // isLoggedIn, userId

                return currentUser;
            }
        }

    }

    @Inject
    LoginWidgetPresenter presenter;

    @Test
    public void testLoggedInUser(LoginWidgetPresenter.MyView myView, @Named("loggedIn") CurrentUserDto currentUser)
    {
        // when
        presenter.onReveal();

        // then
        verify(myView).displayEmail(currentUser.getEmail());
        verify(myView).displayLogoutLink(currentUser.getLogoutUrl());

    }

    @Test
    public void testLoggedOutUser(LoginWidgetPresenter.MyView myView, @Named("loggedOut") CurrentUserDto currentUser)
    {
        // when
        presenter.onReveal();

        // then
        verify(myView, never()).displayEmail(currentUser.getEmail());
        verify(myView, never()).displayLogoutLink(currentUser.getLogoutUrl());

    }

}

スコープに関係しているのではないかと思いますが、依存性注入は初めてなので、まだ頭を悩ませています。

プロバイダーが 1 つしかないときは正常に機能していましたが、現在はare always null@NamedCurrentUserDtoオブジェクトLoginWidgetPresenterを使用しています。

4

2 に答える 2

1

Jukito は @Provides をサポートしているため、以下が機能するはずです。

public static class Module extends JukitoModule
{
        @Override
        protected void configureTest()
        {
        }

        @Provides
        @Named("loggedIn")
        CurrentUserDto getLoggedInDto()
        {
            CurrentUserDto currentUser = new CurrentUserDto(true, 100L); // isLoggedIn, userId
            currentUser.setEmail("john@example.com");
            currentUser.setNickname("john");
            currentUser.setLogoutUrl("#logout");

            return currentUser;
        }

        @Provides
        @Named("loggedOut")
        CurrentUserDto getLoggedOutDto()
        {
            CurrentUserDto currentUser = new CurrentUserDto(false, null); // isLoggedIn, userId

            return currentUser;
        }
}
于 2014-06-10T03:06:05.830 に答える
0

私はLoginWidgetPresenter裸のCurrentUserDto注射をしたと思います。テスト メソッドへのパラメーターは、の依存関係を変更しませんLoginWidgetPresenterCurrentUserDtoこれを処理するには、それぞれが異なる にバインドする2 つの異なるモジュールを使用できますProvider

于 2014-06-09T21:03:06.107 に答える