gpt4 book ai didi

java - 在 Spring 中为方面功能编写集成测试

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:55 25 4
gpt4 key购买 nike

我想知道在测试方面功能时我做错了什么。该方面正在生产中工作(通过 QA 测试),但我正在努力让我的集成单元测试通过。这是我的代码:

@Aspect
@Component
public class MyAspect {

@Pointcut("execution(* com.example.dao.UsersDao(..)) && args(.., restrictions)")
protected void allUsersPointcut(List<String> restrictions) {

}

@Around("allUsersPointcut(restrictions)")
public Object applyUserRestrictions(final ProceedingJoinPoint pjp, List<String> restrictions) throws Throwable {

String restrict = "Jack";
restrictions.add(restrict);

return pjp.proceed();
}

我的 DAO 方法只返回所有用户的列表,但是当使用方面时,它会限制显示的用户。

@Repository
UsersDaoImpl implements UsersDao {
...
}

还有我的用户服务:

@Service
public class UsersService implements UsersService {
@Autowired
protected UsersDAO usersDAO;

...

@Transactional(readOnly=true)
public List<String> findUsers(List<String> restrictions) {
return this.usersDAO.findUsers(restrictions);
}
}

在我的单元测试中,我正在做以下事情:

@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest {

@Autowired
UsersService usersService;

@Test
public void testAspect() {

List<String> restrictions = null;
List<String> users = this.usersService.findUsers(restrictions);
Assert.notNull(users);
}

我还添加了 xml 配置:

context:annotation-config></context:annotation-config>
<aop:aspectj-autoproxy proxy-target-class="true"/>

<context:component-scan base-package="com.example.aspect" />

谁能告诉我做错了什么?

最佳答案

根据我对您的测试的了解,它应该可以工作 - 因此您需要对类路径扫描进行一些调整,确保测试使用预期的配置等。

我建议临时添加:

 @Autowired
ApplicationContext context;

@Before
public void dumpBeans() {
System.out.println(context.getBeansOfType(UsersDao.class));
}

或者,更简单地说,测试方法中的System.out.println(usersDao.getClass())

您还可以在调试器中运行您的测试 - 在您的测试类中添加一个断点,并在运行时检查 usersDao 是什么类。

关于java - 在 Spring 中为方面功能编写集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350538/

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