首页 文章

设置退出数量为3并在Junit Testing中进行测试 .

提问于
浏览
2

在撤销变量的储蓄账户中,我需要确保它在一个月内不能超过3个 . 我检查了setter中的条件,但我不确定如何在JUintTesting中进行测试 . 因为它们都是void方法,并且测试方法返回一个布尔值,我得到的错误是下面是我的代码 .

public void setNumberWithdrawals(int w)
{

    if (getNumberWithdrawals() > 3)
    {
        System.out.println("You already have more than 3 withdraw!!");
    }
    else
    {
        numberWithdrawals = w;
    }
}

用于JUNit测试

SavingsAccount sa1;

 @Test
public void testsetNumberWithdrawals()
{
    assertEquals(true, sa1.setTest(4));
}

我期望它返回false,因为我传递4但我继续获取void和返回类型预期错误,我甚至尝试将值分配给另一个int变量的数字并测试它但我仍然得到错误 .

1 回答

  • 1

    假设:您正在使用JUnit 4(假设您提供的代码使用的是@Test注释,这似乎是一个安全的假设) .

    你会想要你的测试类这样的东西:

    import static org.junit.Assert.*;
    
    import java.io.ByteArrayOutputStream;
    import java.io.PrintStream;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class SavingsAccountTest {
    
        private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
        private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
    
        @Before
        public void setUpStreams() {
            System.setOut(new PrintStream(outContent));
            System.setErr(new PrintStream(errContent));
        }
    
        @After
        public void cleanUpStreams() {
            System.setOut(null);
            System.setErr(null);
        }
    
        @Test
        public void test() {
            SavingsAccount savingsAcct = new SavingsAccount(...);
            savingsAcct.setNumberWithdrawals(...);
            assertEquals("You already have more than 3 withdraw!!\r\n", outContent.toString());
        }
    
    }
    

    Other thoughts:

    鉴于您在github上的问题和代码中发布的代码,有些事情似乎有点奇怪 . 可能只是某些代码仍然缺失,但我想指出一些突出的事情:

    你发布了这个代码: assertEquals(true, sa1.setTest(4));

    现在根据我在github上读到的内容, sa1SavingsAccount 的一个实例,但我没有在任何地方看到这个 setTest(...) 方法的定义 . 我确实看到了 SavingsAccount extends Account 所以我想 setTest(...) 可以在 Account 类中定义 . 这个突出的原因是你说你试图测试 SavingsAccount.setNumberWithdrawals(...) 但你没有在测试中调用 setNumberWithdrawals . 同样,我想这个 setTest 方法可以间接调用 setNumberWithdrawals 但是你发布的所有东西都不清楚 .

    你在问题中说:

    确保它不能超过3

    您拥有的逻辑是 if (getNumberWithdrawals() > 3) ,这意味着提取的数量必须大于3才能触发此逻辑 . 这似乎违反了您的要求 .

相关问题