标签: junit4

Junit @Rule如何运作?

我想为大量代码编写测试用例,我想知道JUnit @Rule注释功能的细节,以便我可以用它来编写测试用例.请提供一些好的答案或链接,通过一个简单的例子详细说明其功能.

java junit junit4 junit-rule

187
推荐指数
4
解决办法
12万
查看次数

我为什么要使用Hamcrest-Matcher和assertThat()而不是传统的assertXXX() - 方法

当我查看Assert类JavaDoc中的示例时

assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1> 
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes
Run Code Online (Sandbox Code Playgroud)

比方说,我没有看到一个很大的优势assertEquals( 0, 1 ).

如果构造变得更复杂但是你看到更多的优点,那么对于消息可能很好吗?可读性?

java testing junit hamcrest junit4

150
推荐指数
5
解决办法
5万
查看次数

模拟系统类时Mockito + PowerMock LinkageError

我有这样的代码片段:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Thread.class})
public class AllMeasuresDataTest {

@Before
public void setUp() throws Exception {
}

@Test
public void testGetMeasures() {
    AllMeasuresData measure = new AllMeasuresData();
    assertEquals(measure.getMeasures(), null);
    HashMap<String, Measure> map = new HashMap<String, Measure>();
    measure.setMeasures(map);
    assertEquals(measure.getMeasures(), map);
    measure.setMeasures(null);
    assertEquals(measure.getMeasures(), null);
}

@Test
public void testAllMeasuresData() throws IOException {
    ClassLoader loader = PowerMockito.mock(ClassLoader.class);
    Thread threadMock = PowerMockito.mock(Thread.class);
    Vector<URL> vec = new Vector<URL>();
    Mockito.when(loader.getResources("measure")).thenReturn(vec.elements());
    Mockito.when(threadMock.getContextClassLoader()).thenReturn(loader);
    PowerMockito.mockStatic(Thread.class);
    Mockito.when(Thread.currentThread()).thenReturn(threadMock);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行此测试时,我得到了:

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading …
Run Code Online (Sandbox Code Playgroud)

java junit4 mockito powermock linkageerror

146
推荐指数
7
解决办法
7万
查看次数

Junit:拆分集成测试和单元测试

我继承了Junit测试的负载,但是这些测试(除了大多数不工作之外)是实际单元测试和集成测试(需要外部系统,db等)的混合.

所以我试图想出一种方法来实际将它们分开,这样我就可以很好地快速运行单元测试,然后进行集成测试.

选项是......

  1. 将它们拆分为单独的目录.

  2. 移至Junit4(从v3开始)并注释类以将它们分开.

  3. 使用文件命名约定来告诉类是什么,即AdapterATest和AdapterAIntergrationTest.

3存在Eclipse可以选择"在所选项目/包或文件夹中运行所有测试"的问题.因此,只需运行集成测试就很难了.

2:冒着开发人员可能开始在单元测试类中编写集成测试的风险,它只会变得混乱.

1:似乎是最好的解决方案,但我的直觉说必须有一个更好的解决方案.

所以这就是我的问题,你如何分解集成测试和适当的单元测试?

testing junit integration-testing unit-testing junit4

124
推荐指数
6
解决办法
5万
查看次数

"junit.framework中的断言已被弃用" - 接下来有什么用?

我将版本junit升级到4.11并得到:

[WARNING] [deprecation] Assert in junit.framework has been deprecated
[WARNING] [deprecation] Assert in junit.framework has been deprecated
....
Run Code Online (Sandbox Code Playgroud)

如何迁移?

junit junit4

120
推荐指数
5
解决办法
7万
查看次数

112
推荐指数
4
解决办法
13万
查看次数

测试运行'JUnit 4'没有测试结果

我的Java测试在Eclipse中运行良好.但现在,当我从运行菜单重新启动测试时,我收到以下消息:

No tests found with test runner 'JUnit 4'
Run Code Online (Sandbox Code Playgroud)

.classpath文件中我有所有jar文件,最后有:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)

如何解决此错误并让测试再次运行?

java eclipse junit junit4

101
推荐指数
9
解决办法
20万
查看次数

如何断言Iterable包含具有特定属性的元素?

假设我想使用此签名对方法进行单元测试:

List<MyItem> getMyItems();
Run Code Online (Sandbox Code Playgroud)

假设MyItem是一个Pojo,它有许多属性,其中一个是"name"通过访问的getName().

我关心验证的是List<MyItem>,或者任何Iterable,包含两个MyItem实例,其"name"属性具有值"foo""bar".如果任何其他属性不匹配,我真的不关心此测试的目的.如果名称匹配,则是成功的测试.

如果可能的话,我希望它是单行的.这是我想要做的事情的一些"伪语法".

assert(listEntriesMatchInAnyOrder(myClass.getMyItems(), property("name"), new String[]{"foo", "bar"});
Run Code Online (Sandbox Code Playgroud)

哈姆克雷斯特会对这类事情有好处吗?如果是这样,我上面的伪语法的hamcrest版本到底是什么?

java unit-testing hamcrest junit4

99
推荐指数
7
解决办法
12万
查看次数

@RunWith(MockitoJUnitRunner.class)vs MockitoAnnotations.initMocks(this)

在编写新的jUnit4测试时,我想知道是否使用@RunWith(MockitoJUnitRunner.class)MockitoAnnotations.initMocks(this).

我创建了一个新测试,向导自动使用Runner生成测试.MockitoJUnitRunner的Javadocs说明如下:

与JUnit 4.4及更高版本兼容,此运行器添加了以下行为:

初始化用Mock注释的模拟,因此不需要明确使用MockitoAnnotations.initMocks(Object).在每种测试方法之前初始化模拟.验证每个测试方法后的框架使用情况.

我不清楚使用Runner是否比我过去使用的initMocks()方法有任何优势.

任何想法或链接将不胜感激!

java junit4 mockito

98
推荐指数
2
解决办法
8万
查看次数

使用PowerMock模拟来自多个类的静态方法

我知道如何使用PowerMock从类中模拟静态方法.
但我想使用JUnit和PowerMock从测试类中的多个类中模拟静态方法.

任何人都可以告诉我是否可以这样做以及如何做到这一点?

java junit4 powermock

97
推荐指数
2
解决办法
6万
查看次数