gpt4 book ai didi

java - JUNIT 空指针异常

转载 作者:行者123 更新时间:2023-11-28 21:00:43 25 4
gpt4 key购买 nike

这是我第一次使用 JUNIT,我真的无法让它工作。

我有一个 person 类,其中有 firstName 和 lastName,还有一个测试类,我需要在其中测试方法。每次我尝试测试一个方法时,如果我为特定方法编写了测试,它就会失败。

这是我的代码。

人物类

public class Person {
private String firstName;
private String lastName;

public Person (String a, String b) {
firstName = a;
lastName = b;
}

public String getfirstName() {
return firstName;
}

public void setfirstName(String firstName) {
this.firstName = firstName;
}

public String getlastName() {
return lastName;
}

public void setlastName(String lastName) {
this.lastName = lastName;
}

@Override
public String toString() {
return firstName + " " + lastName;
}
}

人员测试类

public class PersonTest {
Person p1;

public PersonTest() {
Person p1 = new Person ("Thomas", "Brown");
}

@Before
public void setUp() {}

@After
public void tearDown() {}

@Test
public void testGetfirstName() {
assertEquals("Thomas", p1.getfirstName());
}

@Test
public void testSetfirstName() {}

@Test
public void testGetlastName() {
assertEquals("Brown", p1.getlastName());
}

@Test
public void testSetlastName() {}

@Test
public void testToString() {
assertEquals("Thomas Brown", p1.toString());
}
}

谁能指出我正确的方向?

最佳答案

正确的做法是:

@Before
public void setUp() {
p1 = new Person ("Thomas", "Brown");
}

您的代码中有 2 个问题。

public PersonTest() {
Person p1 = new Person ("Thomas", "Brown");
}

这会创建一个局部变量并且您的字段 p1 保持 null

第二个是在您的 setUp 方法中您没有初始化 p1

您使用 @Before 注释的方法将在每次测试之前运行,您应该将初始化放在那里。我还建议使用更具描述性的名称,因此您应该将 p1 更改为 target 或类似名称。

编辑:对于您的set... 方法,您可以这样做:

public class PersonTest {
private static final String TEST_FIRST_NAME = "some name";

Person target;

// ...
@Test
public void testSetFirstName() {
target.setFirstName(TEST_FIRST_NAME);
Assert.assertEquals(target.getFirstName(), TEST_FIRST_NAME);
}
}

此时您可以假设 getFirstName 有效,因为您也对其进行了测试。

旁注:我认为您不必测试 getter 和 setter,只要您使用 Eclipse 生成它们即可。这只是不必要的。

关于java - JUNIT 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com