Unit testing Grails为测试设置系统属性
是否可以直接为Grails单元测试类的特定方法设置System.property 我有一个Filters类,如果在Config.groovy中设置了系统属性,它会阻止某些操作:Unit testing Grails为测试设置系统属性,unit-testing,grails,groovy,Unit Testing,Grails,Groovy,是否可以直接为Grails单元测试类的特定方法设置System.property 我有一个Filters类,如果在Config.groovy中设置了系统属性,它会阻止某些操作: class MyFilters { def filters = { if ('true'.equals(System.properties.getProperty('myProperty', 'false'))){ writeFilter(controller: "myController",
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类?我无法更改配置中的默认属性,因为其他控制器测试将中断,这只是针对将设置此道具的特定环境,因此我希望通过检查过滤器将启动的测试涵盖该场景
谢谢。不可避免的是,我在发布这篇文章一分钟后就知道了如何做。在setProperty之后添加mockFilters(MyFilters)会使Grails使用更新的属性重新生成模拟过滤器 不可避免的是,我在发布这篇文章一分钟后就知道了该怎么做。在setProperty之后添加mockFilters(MyFilters)会使Grails使用更新的属性重新生成模拟过滤器。(太新,无法自行回答,我会在可能的情况下关闭此问题)。请将您的评论作为答案发布,以便关闭此问题。