理论和参数化测试之间有什么区别?
在创建测试类时,我对实现差异不感兴趣,只是当你选择一个而不是另一个时.
我有一个基于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).
问候和感谢任何帮助!本
我@Parameterized在很多情况下使用多个排列运行测试.这非常有效并且使测试代码本身变得简单和干净.
但是有时候我想让一些测试方法只运行一次,因为它们没有使用参数,JUnit是否有办法将测试方法标记为"singleton"或"run-once"?
注意:这不涉及在Eclipse中运行单个测试,我知道如何做到:)
我编译它时有一个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软件包,编写映像文件的正确方法是什么.
我正在使用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) 我遇到了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) 该类com.sun.xml.bind.v2.model.annotation.AnnotationReader是jaxb-impl 2.1.6的一部分,但已在2.1.7中删除.有人知道为什么吗?
我在项目中升级了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) 我有一个关于使用的问题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
我正在浏览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)