Junit 试验参数下的方法不';不变

Junit 试验参数下的方法不';不变,junit,Junit,嗯,我正在做一个简单的测试来理解junit,老实说,我不明白为什么 @Test void findById() { Long id= 2L; Visit returnedVisit = service.findById(id); assertEquals(Long.valueOf(4L),id); } 改变测试方法中的值后,id等于2 public Visit findById(Long aLong) { aLong= 4L; return new Vi

嗯,我正在做一个简单的测试来理解junit,老实说,我不明白为什么

@Test
void findById() {
    Long id= 2L;
    Visit returnedVisit = service.findById(id);
    assertEquals(Long.valueOf(4L),id);
}
改变测试方法中的值后,id等于2

public Visit findById(Long aLong) {
    aLong= 4L;
    return new Visit();
}

这是因为一个方法(您的测试用例)中的局部基元变量
id
设置为2。然后将其按值传递给另一个方法。按值传递意味着在调用堆栈上放置精确的逐位拷贝。被调用的方法设置变量的本地副本,但这不会修改调用方的变量

如果您传递了一个列表,您将看到修改,因为列表引用是按值传递的,您可以对列表进行更改,如添加新元素,并且调用方的列表也会被修改。您还可以修改对列表的引用,但调用者将看不到它,即,如果您将列表重新分配给被调用方法中的某个新列表,调用者仍将拥有旧列表

这就是Java传递参数的方式;它与JUnit无关


另请参见。

这是因为一个方法(您的测试用例)中的局部基元变量
id
设置为2。然后将其按值传递给另一个方法。按值传递意味着在调用堆栈上放置精确的逐位拷贝。被调用的方法设置变量的本地副本,但这不会修改调用方的变量

如果您传递了一个列表,您将看到修改,因为列表引用是按值传递的,您可以对列表进行更改,如添加新元素,并且调用方的列表也会被修改。您还可以修改对列表的引用,但调用者将看不到它,即,如果您将列表重新分配给被调用方法中的某个新列表,调用者仍将拥有旧列表

这就是Java传递参数的方式;它与JUnit无关


另请参见。

您应该真正了解变量作用域是如何工作的。这与junit无关,也与一般的测试无关。您应该真正了解变量作用域是如何工作的。这与junit无关,也与一般测试无关。您的注释非常有用,但如果您将新元素添加到方法调用方的列表中,则调用方将实际看到它。您的注释非常有用,但如果您将新元素添加到方法调用方的列表中,则调用方将实际看到它