我无法理解JUnit 4.8应该如何与Hamcrest匹配器一起使用.有内部定义了一些匹配器junit-4.8.jar在org.hamcrest.CoreMatchers.同时,也有一些其他的匹配器hamcrest-all-1.1.jar中org.hamcrest.Matchers.那么,去哪里?我应该在项目中明确包含hamcrest JAR并忽略JUnit提供的匹配器吗?
特别是,我对empty()匹配器很感兴趣,并且无法在任何这些罐子中找到它.我需要别的吗?:)
还有一个哲学问题:为什么JUnit将org.hamcrest包装包含在自己的发行版中而不是鼓励我们使用原始的hamcrest库?
我正在大型代码库上运行JUnit测试,我一直意识到有时候我会得到"错误",而有时我会得到"失败".有什么不同?
对于布局,我们有着名的"Lorem ipsum"文本来测试它的外观.
我正在寻找的是一组文件,其中包含用几种不同编码编码的文本,我可以在我的JUnit测试中使用它来测试一些在阅读文本文件时处理字符编码的方法.
例:具有ISO 8859-1编码的测试文件和Windows-1252编码的测试文件.Windows-1252必须触发区域80 16 - 9F 16的差异.换句话说,它必须包含该区域的至少一个字符,以区别于ISO 8859-1.
也许最好的测试文件集是每个编码的测试文件包含其所有字符一次.但也许我不知道某事 - 我们都喜欢这种编码的东西,对吗?:-)
是否有一组用于字符编码问题的测试文件?
如果我有一个包含多个测试的测试套件,当我尝试从代码编辑器的上下文菜单或JUnit视图运行单个单元测试时,它似乎坚持始终运行整个套件,而不是单一测试.有没有办法禁用更改此行为,以便我可以要求运行它,只有那个,测试.
看看我写的最后一个JUnit测试用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法.这对于从Eclipse的"作为JUnit测试用例运行"命令运行该单个类来说效果很好.但我意识到这是不正确的:我很确定我们的主要测试套件从一个进程运行所有这些类,因此log4j配置应该在某个地方更高的位置发生.
但我仍然需要自己运行一个测试用例,在这种情况下我想配置log4j.我应该在哪里放置配置调用,以便在测试用例独立运行时运行它,而不是在测试用例作为更大套件的一部分运行时运行?
是否有一个与NUnit平行的jUnit CollectionAssert?
谁有针对这一共同需求的解决方案.
我的应用程序中有一个类.
一些方法是公共的,因为它们是api的一部分,有些是私有的,因为它们用于内部使用,使内部流程更具可读性
现在,我想写一个单元测试,或者更像是集成测试,它将位于不同的包中,允许调用此方法,但是,我希望不允许正常调用此方法如果你试图从应用程序本身的类中调用它
所以,我在想这样的事情
public class MyClass {
public void somePublicMethod() {
....
}
@PublicForTests
private void somePrivateMethod() {
....
}
}
Run Code Online (Sandbox Code Playgroud)
上面的注释将私有方法标记为"公共测试",这意味着,对于任何在test ...包下的类,将允许编译和运行时,而编译和\或运行时将对任何类失败不在测试包下.
有什么想法吗?有这样的注释吗?有一个更好的方法吗?
似乎你写的单元测试越多,你的更多信息就会破坏你的封装......
我是JUnit的Java测试新手.我必须使用Java,我想使用单元测试.
我的问题是:我有一个带有一些抽象方法的抽象类.但是有些方法并不是抽象的.如何使用JUnit测试此类?示例代码(非常简单):
abstract class Car {
public Car(int speed, int fuel) {
this.speed = speed;
this.fuel = fuel;
}
private int speed;
private int fuel;
abstract void drive();
public int getSpeed() {
return this.speed;
}
public int getFuel() {
return this.fuel;
}
}
Run Code Online (Sandbox Code Playgroud)
我想测试getSpeed()和getFuel()功能.
这个问题的类似问题在这里,但它没有使用JUnit.
在JUnit FAQ部分中,我找到了这个链接,但我不明白作者想用这个例子说些什么.这行代码是什么意思?
public abstract Source getSource() ;
Run Code Online (Sandbox Code Playgroud) 我是java的新手.
我正在构造函数上运行一些JUnit测试.构造函数是这样的,如果给它的一个参数给它一个null或一个空字符串,它应该抛出一个异常.
当我在JUnit中使用null或空字符串参数测试此构造函数时,我得到一个红色条,即使我几乎100%确定构造函数方法确实在将这些参数传递给它时引发异常.
如果方法按照预期的方式抛出异常,JUnit中是否应该有绿色条?或者是当你应该得到一个红色条,当异常抛出按照预期的方式工作时?
我有一个类似下面的代码:
Class A {
public boolean myMethod(someargs) {
MyQueryClass query = new MyQueryClass();
Long id = query.getNextId();
// some more code
}
}
Class MyQueryClass {
....
public Long getNextId() {
//lot of DB code, execute some DB query
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在写一个测试A.myMethod(someargs).我想跳过真正的方法query.getNextId(),而是返回一个存根值.基本上,我想嘲笑MyQueryClass.
所以在我的测试用例中,我使用过:
MyQueryClass query = PowerMockito.mock(MyQueryClass.class);
PowerMockito.whenNew(MyQueryClass.class).withNoArguments().thenReturn(query);
when(query.getNextId()).thenReturn(1000000L);
boolean b = A.getInstance().myMethod(args);
//asserts
Run Code Online (Sandbox Code Playgroud)
我曾经@RunWith(PowerMockRunner.class)和@PrepareForTest({MyQueryClass.class})我的测试类的开始.
但是,当我调试测试,它仍然是调用真正的方法getNextId()中的MyQueryClass类.
我在这里错过了什么?任何人都可以提供帮助,因为我是Mockito和PowerMockito的新手.