我正在使用Jackson来序列化 POJO。我为字符串值编写了一个自定义序列化程序,它工作正常。
但是,当两个序列化程序注册为相同类型时,我不确定会发生什么。在我的测试中,使用了最后一个添加的,但我不确定它是否一直都这样工作。
所以我的问题是:如果我为同一类型添加多个序列化程序,将使用哪一个?
代码片段:
objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(new CustomSerializer1());
module.addSerializer(new CustomSerializer2());
Run Code Online (Sandbox Code Playgroud)
...
class CustomSerializer1 extends NonTypedScalarSerializerBase<String>
class CustomSerializer2 extends NonTypedScalarSerializerBase<String>
Run Code Online (Sandbox Code Playgroud) 我正在为Spring-boot应用程序编写集成测试,并且正在为基本方法和所有其他常见内容使用基本测试类。像这样:
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = ...)
@Sql(scripts = { "script1.sql", ... }, ...)
public abstract class ITBase {
...
Run Code Online (Sandbox Code Playgroud)
我有一个文件生成器,该文件生成器自动连接到服务中,该服务自动连接到控制器中。我正在使用RestTemplate测试控制器。我想模拟文件生成器,只返回一个随机字符串。
因为它是一个Spring Bean,所以我理解我应该以这种方式在测试中使用@MockBean批注:
public class ControllerIT extends ITBase {
@MockBean
private FileGenerator fileGenerator;
@Test
@Transactional
public void testSomeTest() {
...
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果我运行给定的测试类,则所有测试均通过。但是,如果我运行所有测试类,则会得到UnableToRegisterMBeanException。stacktrace看起来像这样:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.boot.test.autoconfigure.AutoConfigureReportTestExecutionListener.prepareTestInstance(AutoConfigureReportTestExecutionListener.java:49)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) …Run Code Online (Sandbox Code Playgroud)