gpt4 book ai didi

java - 如何在单元测试执行之前实例化 session ,以便服务类中的 Autowiring session 正确创建 bean?

转载 作者:行者123 更新时间:2023-11-30 07:33:22 25 4
gpt4 key购买 nike

如何在单元测试执行之前实例化 seesion,以便服务类中的 Autowiring session 正确创建 bean?

我的测试使用服务类中的一些方法。此服务类方法使用自动连线 session 。关键是我不知道如何在测试中(或之前)创建/注入(inject) session ,以便 session bean 使用我事先设置的详细信息在服务中正确创建。

session 类如下所示:

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserSession {
Long idUser;
//...other

//geters and seters
}

测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
public class MyTestClass{

@Autowired
private UserSession session;

@Autowired
private MyServiceClass myServiceClass;

@Test
public void myTestMethod() {
....
//This is where i wanted to set some session detailes
//Something like this:
session.setUserRolls(...);


myServiceClass.myServiceMethod();

}
}

在我的服务类中,我有这样的东西:

@Service
public class MyServiceClass{

@Autowired
private UserSession session;


private void myServiceMethod(){
....
List <UserRol> rolls = session.getUserRolls();
//in this case i want to retrieve user rolls from session object
//
//now i get an error in my current implementation that looks like this
//Error: no Scope registered for scope name "session"
}
}

最佳答案

您唯一应该做的就是将 @WebAppConfiguration 放在测试类之前:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
@WebAppConfiguration
public class MyTestClass{
......
}

在类中,您应该像您一样使用 @autowired 注入(inject) session 类。之后在测试中,在调用服务函数之前,您可以使用 setter 设置 session 详细信息。详细信息将在您的服务中可见,因此一切都应该正常工作。测试类上存在 @WebAppConfiguration 指示 TestContext 框架 (TCF) 应为您的测试加载 WebApplicationContext (WAC),以便为您提供 session 范围的 bean。

关于java - 如何在单元测试执行之前实例化 session ,以便服务类中的 Autowiring session 正确创建 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35742457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com