15

我需要为我编写的算法编写一个 JUnit 测试,该算法输出两个已知值之间的随机整数。

我需要一个 JUnit 测试(即一个类似 assertEquals 的测试),它断言输出的值在这两个整数之间(或不在这两个整数之间)。

即我有值 5 和 10,输出将是 5 到 10 之间的随机值。如果测试是正数,则数字在两个值之间,否则不是。

4

4 回答 4

28
@Test
public void randomTest(){
  int random = randomFunction();
  int high = 10;
  int low = 5;
  assertTrue("Error, random is too high", high >= random);
  assertTrue("Error, random is too low",  low  <= random);
  //System.out.println("Test passed: " + random + " is within " + high + " and + low);
}
于 2013-01-30T22:21:27.537 回答
21

你可以使用junitassertThat方法(因为JUnit 4.4

http://www.vogella.com/tutorials/Hamcrest/article.html

import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.lessThan;
import static org.junit.Assert.assertThat;

……

@Test
public void randomTest(){
    int random = 8;
    int high = 10;
    int low = 5;
    assertThat(random, allOf(greaterThan(low), lessThan(high)));
}
于 2016-07-16T16:09:33.097 回答
0

您可能还会遇到一个情况,例如一个参数是对象,另一个是原始参数,这也不起作用,只需将原始参数更改为对象即可。

例如:

Request.setSomething(2);// which is integer field
Integer num = Request.getSomething();

//while testing give the object i.e num 
assertEquals(Request.getSomething(),num);
于 2018-07-27T06:35:09.793 回答
0

您可以使用支持参数double的版本:assertEqualsdelta

assertEquals(double expected, double actual, double delta)

例子:

int random = 8;
int high = 10;
int low = 5;

assertEquals((high + low) / 2.0, random, (high - low) / 2.0);
于 2020-08-21T11:32:58.183 回答