首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将变量的值从java类获取到JUnit

如何将变量的值从java类获取到JUnit
EN

Stack Overflow用户
提问于 2018-03-25 15:58:08
回答 3查看 1.1K关注 0票数 0

我正在测试我的计算器的功能:

//Calculator.java (伪)

参数1: int

参数2: int

参数3:随机数生成器

示例:parameter1 (random parameter 3) parameter2

现在,由于参数3(随机),我在断言中遇到了问题。

我不能在assert中输入静态值,我需要先获取random的值。帮助

EN

回答 3

Stack Overflow用户

发布于 2018-03-25 16:19:38

您可以在Calculator类中提供一个getter来检索所使用的操作符,但这是一种有限的方法,因为您将在对象状态中提供信息。

因此,它将始终返回最后使用的运算符。

它不是线程安全的,而且在calculate()方法中抛出异常的情况下,如果你不给它赋值,表明上一次计算失败了,你可能会感到惊讶。

作为替代,您可以返回一个包装结果( int )和有效使用的运算符的对象,而不是返回一个整数。

请注意,单元测试必须涵盖calculate()方法的所有可能场景。

由于所用运算符的随机性,保证所有场景都被测试是不直接的。

您应该打开被测试方法的API以选择要使用的运算符(打破随机性以进行可重复的测试),或者在您的测试方法中根据需要对被测试方法执行尽可能多的调用,直到覆盖所有情况为止。

票数 2
EN

Stack Overflow用户

发布于 2018-03-25 16:33:11

您在calculate方法中定义了int operator。此变量的作用域仅在此块内。

代码语言:javascript
复制
public class Calculate {

    public int calculate(int a, int b) {
        int operator = randomise(4);
        switch (operator) {
            case 0:
                return add(num1, num2);
            case 1:
                return multiply(num1, num2);
            case 2:
                return subtract(num1, num2);
            case 3:
                return divide(num1, num2);
            default:
                return 0;
        }
    }

}

正如davidxx所说,您可以在Calculator类中提供一个getter来检索操作符:

代码语言:javascript
复制
public class Calculate {

    private int operator;

    public int calculate(int a, int b) {
        operator = randomise(4);
        switch (operator) {
            case 0:
                return add(num1, num2);
            case 1:
                return multiply(num1, num2);
            case 2:
                return subtract(num1, num2);
            case 3:
                return divide(num1, num2);
            default:
                return 0;
        }
    }

    public int getOperator()
    {
        return operator;
    }

}

或者使用他提出的替代方案。

票数 1
EN

Stack Overflow用户

发布于 2018-03-26 01:58:15

对于您预期的结果,您希望知道所使用的(随机)运算符。这意味着你的测试实际上是同时测试两件事:

  • 计算器是否选择了随机运算符?
  • 是使用该随机运算符的结果是否正确?

从理论上讲,这导致了无限数量的测试用例。

您似乎还使用了自定义方法: add(num1,num2);multiply(num1,num2);等等。因此:

  • 对这些方法中的每一个进行单独的测试,
  • 使测试随机选择的方法成为可能,而无需检查操作的结果(如davidxxx如上所述)

接口: assertEquals(int expected,int actual)表示代码应该是'expected =‘,而不是'actual =’,然后是assertEquals(expected,resultCalculate);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49473669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档