Java 访问空对象字段

Java 访问空对象字段,java,string,unit-testing,nullpointerexception,null,Java,String,Unit Testing,Nullpointerexception,Null,我有一个测试类,在其中我给出一个字符串值。但对于一个特定的测试,我需要给出null参数 setversion(versionString) 这是在契约类中解析的。在合同类中有一个解析字符串的方法 public void setversion(String versionString){ versionString.trim(); //some logic here with string } 当我在contract类中创建了一个在传递null时返回null的方法时,我得到了一个评论,认为更

我有一个测试类,在其中我给出一个字符串值。但对于一个特定的测试,我需要给出null参数

setversion(versionString)
这是在契约类中解析的。在合同类中有一个解析字符串的方法

public void setversion(String versionString){
versionString.trim(); 
//some logic here with string
}
当我在contract类中创建了一个在传递null时返回null的方法时,我得到了一个评论,认为更改contract类不是一个好的实践

 setversion(null);

我无法更改contract类中存在方法setVersion的任何内容。如何更改测试方法。

该方法将返回一个
NullPointerException
,因此,如果无法更改合同类,则只能测试预期发生的情况:

@Test(expected=NullPointerException.class)
public void testNullInput() {
    fail(setversion(null));
}

你可以使用mockito的
spy
机制

T t = new T();
T tspy = Mockito.spy(t);
Mockito.when(tspy.setversion(null)).thenReturn(null)

为什么需要给它一个null参数?我需要在测试方法中给它。如果您不能更改
合同
类(或
setversion
),传递
null将导致NullPointerException,您对此无能为力。为什么不检查
setversion(..)中的值是否为null方法
?很难理解您为什么不能更改合同,而仍然需要空值。。。也许
setversion(“”)
测试实际上不应该失败。因为还有其他一些方法依赖于此,它们根据传递的参数生成消息。所以,如果传递null,则显示关键消息,类似于