所以,我正在创建一个模拟对象作为类级别的静态变量,如此...在一个测试中,我想Foo.someMethod()返回一个特定的值,而在另一个测试中,我希望它返回一个不同的值.我遇到的问题是,似乎我需要重建模拟才能使其正常工作.我想避免重建模拟,并在每次测试中使用相同的对象.
class TestClass {
private static Foo mockFoo;
@BeforeClass
public static void setUp() {
mockFoo = mock(Foo.class);
}
@Test
public void test1() {
when(mockFoo.someMethod()).thenReturn(0);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value
}
@Test
public void test2() {
when(mockFoo.someMethod()).thenReturn(1);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个测试中,当调用testObj.bar()时,我仍然接收0作为值...解决此问题的最佳方法是什么?请注意,我知道我可以Foo在每个测试中使用不同的模拟,但是,我必须将多个请求链接起来mockFoo,这意味着我必须在每个测试中进行链接.
我有一个关于junit assertEquals来测试双值的问题.阅读API文档,我可以看到:
Run Code Online (Sandbox Code Playgroud)@Deprecated public static void assertEquals(double expected, double actual)已过时.使用assertEquals(双重预期,双重实际,双重epsilon)代替
这个epsilon值意味着什么?(Epsilon是希腊字母表中的一封信,对吧?).
有人可以向我解释如何使用它吗?
我有一些测试代码,它调用Java记录器来报告其状态.在JUnit测试代码中,我想验证在此记录器中是否输入了正确的日志.以下内容:
methodUnderTest(bool x){
if(x)
logger.info("x happened")
}
@Test tester(){
// perhaps setup a logger first.
methodUnderTest(true);
assertXXXXXX(loggedLevel(),Level.INFO);
}
Run Code Online (Sandbox Code Playgroud)
我想这可以通过特殊改编的记录器(或处理程序或格式化程序)来完成,但我更愿意重用已经存在的解决方案.(而且,说实话,我不清楚如何从记录器获取logRecord,但假设这是可能的.)
在JUnit中是否有可能断言一个对象是一个类的实例?由于各种原因,我在测试中有一个对象,我想检查其类型.它是Object1的类型还是Object2的类型?
目前我有:
assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道是否有更有表现力的方式来做到这一点.
例如:
assertObjectIsClass(myObject, Object1);
Run Code Online (Sandbox Code Playgroud)
我能做到这一点:
assertEquals(myObject.class, Object1.getClass());
Run Code Online (Sandbox Code Playgroud)
是否有一个特定的断言方法,允许我以更优雅,流畅的方式测试对象的类型?
我决定今天早上通过试用版试用IntelliJ并安装了JUnit插件.我创建了一个新的Java项目,我想为它编写一个测试用例.
如何将junit.jar文件添加到项目中?(我实际上想将它添加到每个java项目中,现在和永远更多 - 有没有办法做到这一点?).
是否有更好的方式在jUnit中编写
String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
Run Code Online (Sandbox Code Playgroud) 我有Hudson作为持续集成服务器,我想使用选项'发布JUnit测试结果报告'.但是我不使用xUnit工具进行测试,而是使用shell脚本运行测试并以简单格式返回结果.我想创建一个脚本,将这些结果转换为JUnit格式.所以我很有趣JUnit文件必须看起来如何?
我刚刚在我的大学开始计算机科学课程,而且我在使用IntelliJ时遇到了一些问题.当我尝试运行单元测试时,我收到了消息
Process finished with exit code 1
Class not found: "edu.macalester.comp124.hw0.AreaTest"Empty test suite.
Run Code Online (Sandbox Code Playgroud)
我还在屏幕左侧看到一条标题为"未找到测试"的消息.我的测试代码在这里:
package edu.macalester.comp124.hw0;
import org.junit.Test;
import static org.junit.Assert.*;
public class AreaTest {
@Test
public void testSquare() {
assertEquals(Area.getSquareArea(3.0), 9.0, 0.001);
}
@Test
public void testCircle() {
assertEquals(Area.getCircleArea(3.0), 28.2743, 0.001);
}
}
Run Code Online (Sandbox Code Playgroud)
我的项目代码在这里:
package edu.macalester.comp124.hw0;
import java.lang.Math;
public class Area {
/**
* Calculates the area of a square.
* @param sideLength The length of the side of a square
* @return The area
*/
public static double …Run Code Online (Sandbox Code Playgroud) 我有一个最后的课,类似这样:
public final class RainOnTrees{
public void startRain(){
// some code here
}
}
Run Code Online (Sandbox Code Playgroud)
我在其他类中使用此类,如下所示:
public class Seasons{
RainOnTrees rain = new RainOnTrees();
public void findSeasonAndRain(){
rain.startRain();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的JUnit测试类中,Seasons.java我想模拟这个RainOnTrees类.我怎么能和Mockito一起做这件事?