Java 在junits中初始化只读对象的最佳方法

Java 在junits中初始化只读对象的最佳方法,java,junit,mockito,powermock,powermockito,Java,Junit,Mockito,Powermock,Powermockito,我有一个只读类,将由Jackson初始化。我将给出API使用的jar,不希望用户设置对象的属性 class ReadOnlyClass { private String value; public String getValue() { return this.value; } } 现在,必须将此对象传递给另一个服务以执行其他工作 我想为此服务编写Junits。如何初始化此对象 我听说使用反射是一种不好的做法。powermock/mockito或任何其他

我有一个只读类,将由Jackson初始化。我将给出API使用的jar,不希望用户设置对象的属性

class ReadOnlyClass {
    private String value;
    public String getValue() {
        return this.value;
    }
}
现在,必须将此对象传递给另一个服务以执行其他工作

我想为此服务编写Junits。如何初始化此对象

我听说使用反射是一种不好的做法。powermock/mockito或任何其他库中是否有我可以使用的实用程序

  • 如果可以修改ReadOnlyClass,则可以创建构造函数
  • 您可以准备json并使用Jackson反序列化它
  • 如果可以修改ReadOnlyClass,则可以创建构造函数
  • 您可以准备json并使用Jackson反序列化它
  • powermock/mockito或任何其他库中是否有我可以使用的实用程序

    这样就应该行了,

    class SomeService{
        public void doSomeTask(ReadOnlyClass roc){
          // Some logic
        }
    
    }
    
    class SomeServiceTest{
    
       @Mock
       private ReadOnlyClass readOnlyClass;
    
    @autowired
       private SomeService someService;
    
       @Test
       public void testDoSomeTask(){
          when(readOnlyClass.getValue())
                    .thenReturn("some value");
          someService.doSomeTask(readOnlyClass);
       }
    }
    
    powermock/mockito或任何其他库中是否有我可以使用的实用程序

    这样就应该行了,

    class SomeService{
        public void doSomeTask(ReadOnlyClass roc){
          // Some logic
        }
    
    }
    
    class SomeServiceTest{
    
       @Mock
       private ReadOnlyClass readOnlyClass;
    
    @autowired
       private SomeService someService;
    
       @Test
       public void testDoSomeTask(){
          when(readOnlyClass.getValue())
                    .thenReturn("some value");
          someService.doSomeTask(readOnlyClass);
       }
    }
    

    值设置为final,编写一个构造函数来设置
    值。还可以选中Lombok。创建构造函数可以允许api用户创建自己的对象并输入自己的值。我不想允许这样。在应用程序中如何初始化对象?通过Jackson objectmapper.readvalueMake
    value
    final,编写一个构造函数来设置
    。还可以选中Lombok。创建构造函数可以允许api用户创建自己的对象并输入自己的值。我不想允许这样。在应用程序中如何初始化对象?通过Jackson objectmapper.readvalue