alizer<Foo> {
@Override
public Foo deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// ...
}
}
}
测试代码JsonComponentJsonTest:
@SpringBootTest(classes = { JsonComponentJacksonTest.class, FooJsonComponent.class })
@JsonTest
public class JsonComponentJacksonTest extends AbstractTestNGSpringContextTests {
@Autowired
private JacksonTester<Foo> json;
@Test
public void testSerialize() throws Exception {
Foo details = new Foo("Honda", 12);
assertThat(this.json.write(details).getJson()).isEqualTo("\"name=Honda,age=12\"");
}
@Test
public void testDeserialize() throws Exception {
String content = "\"name=Ford,age=13\"";
Foo actual = this.json.parseObject(content);
assertThat(actual).isEqualTo(new Foo("Ford", 13));
assertThat(actual.getName()).isEqualTo("Ford");
assertThat(actual.getAge()).isEqualTo(13);
}
}
例子3: 使用@ContextConfiguration
事实上@JsonTest也可以配合@ContextConfiguration一起使用。
源代码见ThinJsonTest:
@JsonTest
@ContextConfiguration(classes = JsonTest.class)
public class ThinJsonTest extends AbstractTestNGSpringContextTests {
@Autowired
private JacksonTester<Foo> json;
@Test
public void testSerialize() throws Exception {
// ...
}
@Test
public void testDeserialize() throws Exception {
// ...
}
}
@OverrideAutoConfiguration
在 Spring、Spring Boot 和 TestNG 测试指南 ( 1 ) 提到:
除了单元测试(不需要初始化ApplicationContext的测试)外,尽量将测试配置和生产配置保持一致。比如如果生产配置里启用了AutoConfiguration,那么测试配置也应该启用。因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。
那么当我们想在测试代码里关闭Auto Configuration如何处理?
方法1:提供另一套测试配置
方法2:使用@OverrideAutoConfiguration
方法1虽然能够很好的解决问题,但是比较麻烦。而方法2则能够不改变原有配置、不提供新的配置的情况下,就能够关闭Auto Configuration。
在本章节的例子里,我们自己做了一个Auto Configuration类,AutoConfigurationEnableLogger:
@Configuration
public class AutoConfigurationEnableLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(AutoConfigurationEnableLogger.class);
public AutoConfigurationEnableLogger() {
LOGGER.info("Auto Configuration Enabled");
}
}
并且在META-INF/spring.factories里注册了它:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
me.chanjar.annotation.overrideac.AutoConfigurationEnableLogger
这样一来,只要Spring Boot启动了Auto Configuration就会打印出日志:
2017-08-24 16:44:52.789 INFO 13212 --- [ main] m.c.a.o.AutoConfigurationEnableLogger : Auto Configuration Enabled
例子1:未关闭Auto Configuration
源代码见BootTest:
@SpringBootTest
@SpringBootApplication
public class BootTest extends AbstractTestNGSpringContextTests {
@Test
public void testName() throws Exception {
}
}
查看输出的日志,会发现Auto Configuration已经启用。
例子2:关闭Auto Configuration
然后我们用@OverrideAutoConfiguration关闭了Auto Configuration。
源代码见BootTest:
@SpringBootTest
@OverrideAutoConfiguration(enabled = false)
@SpringBootApplication
public class BootTest extends AbstractTestNGSpringContextTests {
@Test
public void testName() throws Exception {
}
}
再查看输出的日志,就会发现Auto Configuration已经关闭。
@TestConfiguration
@TestConfiguration是Spring Boot Test提供的一种工具,用它我们可以在一般的@Configuration之外补充测试专门用的Bean或者自定义的配置。
@TestConfi