是否可以直接为Grails单元测试类的特定方法设置System.property?
我有一个Filters类,如果在Config.groovy中设置了系统属性,它会阻止某些操作:
class MyFilters {
def filters =
{
if ('true'.equals(System.properties.getProperty('myProperty', 'false'))){
writeFilter(controller: "myController", action: "update")
{
before =
{
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return false;
在MyControllerTests中,我正在尝试为过滤器实现测试:
void testMyFilter(){
System.properties.setProperty('myProperty', 'true')
withFilters(action:"update") {
controller.update()
}
assert response.status == HttpServletResponse.SC_FORBIDDEN
}
但是在此阶段已经模拟了过滤器类(使用Config中的默认“false”属性值),因此测试中属性的更改无效。
有没有解决方法,或者在改变道具后强制Grails重新加载Filters类的方法?我无法更改Config中的默认属性,因为其他控制器测试将会中断,它只适用于将设置此prop的特定环境,因此我希望检查Filter将启动的测试所涵盖的场景。 / p>
感谢。
答案 0 :(得分:1)
不可避免地,我在发布这个帖子后一分钟后发现了怎么做。在setProperty之后添加mockFilters(MyFilters)使Grails使用updated属性重建模拟过滤器。