Mock @ org.jboss.seam.annotations.in поведение для юнит-теста - PullRequest
0 голосов
/ 04 апреля 2011

Тест:

public class BeanTest {

    private SomeBean target;

    @Test(groups = "integration")
    public void checkIfAuthenticationWorks() {

        ApplicationBean applicationBean = mock(ApplicationBean.class);
        target = new SomeBean();

        // Some cool code to inject applicationBean to target class

        assertEquals("token", target.authenticate(USERNAME, PASSWORD));
    }
}

Класс:

@AutoCreate
@Name("someBean")
@Scope(ScopeType.SESSION)
public class someBean implements Serializable {

    @Logger
    private static Log log;

    @In
    ApplicationBean applicationBean;

    public String authenticate(String username, String password) {

     // Very cool code!

    return "token";
    }
}

Есть ли какой-нибудь умный способ решения проблемы с приложением Bean?

// Якоб

1 Ответ

1 голос
/ 05 апреля 2011

Сначала сделайте тест способом Seam, который расширяется SeamTest:

public class BeanTest extends SeamTest {

    private SomeBean target;

    @Test(groups = "integration")
    public void checkIfAuthenticationWorks() {

        target = (SomeBean) Component.getInstance(SomeBean.class);
        // target get injected with the MockApplicationBean


        assertEquals("token", target.authenticate(USERNAME, PASSWORD));
    }
}

Затем создайте MockApplicationBean с приоритетом MOCK и поместите его в путь к классу теста, чтобы онбудет введен вместо действительного ApplicationBean:

@Name("applicationBean")
@Install(precedence = MOCK)
public class MockApplicationBean extends ApplicationBean
{
  // your mocked ApplicationBean  

}

Наконец, обратите внимание, что target должен быть создан как компонент Seam, а не как "new":

SomeBean target = (SomeBean) Component.getInstance(SomeBean.class);
...