为构造函数编写 JUnit 测试用例

Writing a JUnit test case for a constructor

我有一项学校作业涉及学习如何使用 JUnit4。我需要确保此构造函数正常工作,但是,我不确定如何操作。余额有一个 getter,因此测试构造函数是否适用于此非常容易,但是,我不知道如何编写涉及用户和通过的测试用例,因为它们没有 getter秒。我是否为每个单独的参数写一个案例?为 return 一个值的方法编写案例并不太难,但我对为这个构造函数编写一个案例一无所知。谢谢!

public class BankAccount {

    // Starting balance
    private float balance = 0.0f;
    // Username and password
    private char[] username = null;
    private char[] password = null;


    public BankAccount(float balance, char[] user,char[] pass) {
        this.balance = balance;
        this.username = user;
        this.password = pass;
    }
}

在这种情况下,您应该编写一个测试。你不需要再写了,因为它只是重复的。此测试应控制字段分配:

@Test
public void propertiesAreSetOnBankAccountConstructor() {
    float balance = 100F;
    char[] userNameArray = {'u'};
    char[] passArray = {'p'};
    BankAccount testedObject = new BankAccount(balance, userNameArray, passArray);

    assertEquals(balance, testedObject.getBalance(), 0F);
    assertSame(userNameArray, testedObject.getUsername());
    assertSame(passArray, testedObject.getPassword());
}

更新: 如果没有吸气剂,您可以使用 org.springframework.test.util.ReflectionTestUtils (或仅使用纯反射):

@Test
public void propertiesAreSetOnBankAccountConstructor() {
    float balance = 100F;
    char[] userNameArray = {'u'};
    char[] passArray = {'p'};
    BankAccount testedObject = new BankAccount(balance, userNameArray, passArray);

    assertEquals(balance, ((Float)ReflectionTestUtils.getField(testedObject, "balance")), 0F);
    assertSame(userNameArray, ReflectionTestUtils.getField(testedObject, "username"));
    assertSame(passArray, ReflectionTestUtils.getField(testedObject, "password"));
}

参考这个例子。

import static org.junit.Assert.assertThat;
import org.junit.Test; 
public class CalculatorTest {

    @Test
        public void constructorTest(){
        private Calculator c;
        c = new Calculator(4, 5);
        assertThat(9, is(c.sum()));
    }


}