小编Ste*_*ner的帖子

JUnit理论与参数化测试的区别

理论和参数化测试之间有什么区别?

在创建测试类时,我对实现差异不感兴趣,只是当你选择一个而不是另一个时.

java parameterized junit4

59
推荐指数
2
解决办法
1万
查看次数

无法使用PowerMockRunner运行JUnit测试

我有一个基于Gradle的Java项目,我现在想要使用PowerMock模拟一个私有方法.问题是我无法使用PowerMockRunner,因为我在添加@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)注释时总是遇到以下异常.

错误:

org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.
at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581)
at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308)
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79)
at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49)
at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108)
...
Run Code Online (Sandbox Code Playgroud)

这是我的测试依赖项:

testCompile 'junit:junit:4.+',
            'org.powermock:powermock-core:1.5.6',
            'org.powermock:powermock-module-junit4:1.5.6',
            'org.powermock:powermock-api-mockito:1.5.6'
Run Code Online (Sandbox Code Playgroud)

完全为空时(初始化错误),测试本身也会失败:

@RunWith(PowerMockRunner.class)
public class SomeTest {
    @Test
    public void testSomething() {
    }
}
Run Code Online (Sandbox Code Playgroud)

什么想法可能是错的?使用PowerMock的其他测试工作正常(它们都没有使用PowerMockRunner).

问候和感谢任何帮助!本

java junit exception powermock

53
推荐指数
1
解决办法
4万
查看次数

当使用JUnit的@Parameterized时,我可以让一些测试仍然只运行一次

@Parameterized在很多情况下使用多个排列运行测试.这非常有效并且使测试代码本身变得简单和干净.

但是有时候我想让一些测试方法只运行一次,因为它们没有使用参数,JUnit是否有办法将测试方法标记为"singleton"或"run-once"?

注意:这不涉及在Eclipse中运行单个测试,我知道如何做到:)

java junit parameterized junit4

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

import com.sun.image.codec.jpeg.*

我编译它时有一个Java程序我得到以下错误

[javac] ...\MyClass.java:33: package com.sun.image.codec.jpeg does not exist
[javac] import com.sun.image.codec.jpeg.*;
[javac] ^
Run Code Online (Sandbox Code Playgroud)

我能做什么 ?

现在不推荐使用com.sun软件包,编写映像文件的正确方法是什么.

java image-processing

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

Jedis Pool如何运作?

我正在使用Jedis池来管理与Redis服务器的连接.我的示例代码如下:

public Set<String> getTopArticleList(int start, int end) {
    Set<String> list = null;
    Jedis j = JedisFactory.getInstance().getJedisPool().getResource();
    Pipeline pipe = j.pipelined();
    try {
        // do stuff with redis
        pipe.sync();
    } catch (JedisConnectionException jex) {
        JedisFactory.getInstance().getJedisPool().returnBrokenResource(j);
    } finally {
        JedisFactory.getInstance().getJedisPool().returnResource(j);
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

用于创建和检索Jedis池的代码:

class JedisFactory {
    private static JedisPool jedisPool;
    public JedisFactory() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        jedisPool = new JedisPool(
            poolConfig,
            RedisDBConfig.HOST,
            RedisDBConfig.PORT,
            RedisDBConfig.TIMEOUT,
            RedisDBConfig.PASSWORD
        );
    }

    public JedisPool getJedisPool() {
        return jedisPool;
    }

    public static JedisFactory getInstance() …
Run Code Online (Sandbox Code Playgroud)

java connection-pooling jedis

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

Java/Hibernate:无法使用嵌套对象标准解析属性

我遇到了Hibernate标准的问题.我正在尝试创建一个Criteria,我查看查询返回的类的成员对象的id.

例如:

Criteria crit = session.createCriteria(Enquiry.class);
crit.add(Expression.eq("lecture.admin.id", userId));`
Run Code Online (Sandbox Code Playgroud)

结果是一个例外:
org.hibernate.QueryException: could not resolve property: lecture.admin.id of: xxx.yyy.Enquiry

Enquiry班确实包含讲座变量,又包含了admin变量.我尝试过使用lecture.id,效果很好.

像这样的对象层次结构中的级别数是否有限制?

谢谢!

代码片段:

public class Lecture extends TransferItem {  
  private User admin;  
  public User getAdmin() {  
    return admin;  
  }
}
Run Code Online (Sandbox Code Playgroud)

'User'类扩展了Person类,后者又扩展了一个Item类,该类具有以下getId()方法:

public Integer getId() {  
  if (id != null) {  
    return id;  
  }  
  return TransferBean.NOT_SET;  
}
Run Code Online (Sandbox Code Playgroud)

从Hibernate映射XML:

<class name="User" table="user">  
  <id column="user_id" name="id">
    <generator class="increment"/>  
  </id>
  ...

<class name="Lecture" table="lecture">  
  <many-to-one class="User" …
Run Code Online (Sandbox Code Playgroud)

java hibernate

31
推荐指数
1
解决办法
3万
查看次数

为什么从JAXB参考实现中删除了AnnotationReader?

该类com.sun.xml.bind.v2.model.annotation.AnnotationReader是jaxb-impl 2.1.6的一部分,但已在2.1.7中删除.有人知道为什么吗?

jaxb jaxb2

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

在Spring Boot 1.4中不推荐使用FilterRegistrationBean.*

我在项目中升级了Spring Boot依赖项,并且我意识到某些类(例如FilterRegistrationBean)已被弃用.

你知道如何在Spring Boot 1.4.1中实现Filter吗?

过滤豆

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    AuthenticationFilter f = new AuthenticationFilter();
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(f);
    registrationBean.addInitParameter("defaultToken", defaultToken);
    registrationBean.addInitParameter("secretKey", secretKey);
    ArrayList<String> match = new ArrayList<>();
    match.add("/users/*");
    registrationBean.setUrlPatterns(match);
    return registrationBean;
}
Run Code Online (Sandbox Code Playgroud)

我的过滤器代码:

public class AuthenticationFilter implements Filter {

private String defaultToken;
private String secretKey;

private UserSessionTokenRepository userSessionTokenRepository;
private UserManager userManager;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    defaultToken = filterConfig.getInitParameter("defaultToken");
    secretKey = filterConfig.getInitParameter("secretKey");
    userSessionTokenRepository = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()).getBean(UserSessionTokenRepository.class);
    userManager = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()).getBean(UserManager.class);
}

@Override
public void doFilter(ServletRequest …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc filter

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

使用MockitoJUnitRunner.class而不是SpringJUnit4ClassRunner.class

我有一个关于使用的问题SpringJUnit4ClassRunner.对于纯Junits或单元测试用例,我们是否应该使用基于Spring的注释,例如@Autowired,SpringJUnit4ClassRunner或者我们是否应该只使用Test类顶部MockitoJUnitRunner@RunWith注释?

我的意思是更换

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })
Run Code Online (Sandbox Code Playgroud)

只是

@RunWith(MockitoJUnitRunner.class)
Run Code Online (Sandbox Code Playgroud)

在班上.这个对我有用.

在Junits中,我们通常不会进行任何外部调用,例如调用DB或调用其他Web服务.我们必须使用@Mock此服务对象上的注释来模拟这些外部调用.然后创建我们正在测试的类的真实对象,这取决于这些模拟.然后我们可以@InjectMocks在真实对象上使用它,以便它将被注入模拟对象.

示例服务-A->呼叫 - >服务-B->呼叫 - >服务-C

在测试A时,我们应该在测试Service-B时模拟服务B,我们应该模拟Service-C.

一些代码片段

@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
    @Mock
    B mockObj;

    @InjectMocks
    A realObj;

    @Test
    public void testServiceA() {
    .....
    .....
    }
}       
Run Code Online (Sandbox Code Playgroud)

所以,我觉得对于Unit测试用例,我们不需要依赖Spring容器来为我们提供我们正在测试的类的实例.

请提出你的建议.

使用SpringJUnit4ClassRunner.class而不是MockitoJUnitRunner.class

java junit unit-testing

16
推荐指数
1
解决办法
1万
查看次数

为什么Junit中的Test方法应该被公开定义?

我正在浏览junit测试的文档,但我无法理解将测试定义为public的需要.是否有人可以分享一些关于此的信息?

我在https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java上阅读

但我仍然不清楚原因.

因为我的意思是为什么我不能写一些东西

@Test
private void testAdd(){ }
Run Code Online (Sandbox Code Playgroud)

junit junit4

9
推荐指数
2
解决办法
493
查看次数