spring - Junit 为测试设置系统属性不起作用

标签 spring junit

我有一个问题,我认为我现在可以解决...

我正在编写一些简单的测试来访问几个服务...

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

    private static Logger log = Logger.getLogger(ApplicationController.class.getName());

    @Autowired
    private WebApplicationContext context;
    private MockMvc mockMvc;

    @Mock
    private ApplicationController applicationController = new     ApplicationController();
    static {
        System.setProperty("audit.enabled", "false");
    }

    @BeforeClass
    public static void setupProperties() {
        System.setProperty("audit.enabled", "false");
    }

    @Before
    public void setup() {
       MockitoAnnotations.initMocks(this);
       mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void contextLoads() {}

    @Test
    public void testGetApplications() throws Exception  {
        mockMvc.perform(get("/applications/")).andExpect(status().isOk())
               .andDo(print())
               .andExpect(content().contentType(TestUtils.APPLICATION_JSON_UTF8))
               .andExpect(jsonPath("$.[0].name",is("XYZ")));
    }

长话短说,我需要在运行测试时禁用此属性。正如我在其他帖子中看到的那样,我已经尝试在静态初始值设定项和 @BeforeClass 中设置属性,但是当它进入实际方法时,它仍然是默认的“启用”值并且测试失败。我没有使用 XML 配置,所以更喜欢代码/注释解决方案。

关于我可以解决这个问题的其他方法有什么建议吗?谢谢。

更新

似乎每次我的集成测试运行时:

 @Test
    public void testGetApplications() throws Exception  {
        mockMvc.perform(get("/applications/")).andExpect(status().isOk())
               .andDo(print())
               .andExpect(content().contentType(TestUtils.APPLICATION_JSON_UTF8))
               .andExpect(jsonPath("$.[0].name",is("paasport-services")));
    }

它在调用 mockMvc.perform 时执行我的 @Configuration 类...

@Configuration
public class AppConfiguration 
...
...

所以在我的测试类中设置属性值没有好处。 有什么方法可以介于两者之间并为我的测试设置这个属性吗?我不想真正创建一个单独的测试应用程序上下文,因为它只是一个属性,到目前为止一切都对我来说运行良好。 谢谢。

最佳答案

我确信有一个更优雅的解决方案,但我只是在测试类的@BeforeClass 中设置了一个新的系统属性。

我的审计由一个方面处理,我只是检查我只在我的测试类中设置的属性。如果将其设置为 true,则不会执行建议。

关于spring - Junit 为测试设置系统属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932740/

相关文章:

java - 如何在 Play Framework 2.x [Java] 中模拟 Controller /休息端点以进行单元测试

java - 如何对 gwt MVP Activity 和地点项目进行测试?

java - 从 jUnit 测试调用方法

java - spring中根据url不同的i18n

java - 将映射(键和值)绑定(bind)到 jsp 中的 spring 表单

java - Spring MVC 2 中的响应主体

Java Spring JPA 存储库

spring - 为什么大多数人为了创建服务而创建接口(interface)?

android - 测试应出现在 ActionBar 中的 Fragment 菜单项

java - EasyMock/PowerMock导入问题