Tag: unit testing

如何将Mockito捕获的aguments传递给注入的模拟对象的方法?

我正在尝试测试一个服务类,它在内部使用Spring AMQP连接对象。 此连接对象由Spring注入。 但是,我不希望我的unit testing实际上与AMQP代理通信,因此我使用Mockito注入连接对象的模拟。 /** * The real service class being tested. Has an injected dependency. */ public class UserService { @Autowired private AmqpTemplate amqpTemplate; public final String doSomething(final String inputString) { final String requestId = UUID.randomUUID().toString(); final Message message = …; amqpTemplate.send(requestId, message); return requestId; } } /** * Unit test */ public […]

Play framework 2.2.1:为测试创建Http.Context

我一直在尝试使用其构造函数为测试创建一个Http.Context失败。 有人看到我做错了吗? 我看过以下内容,但它仅适用于Play 2.0: Play framework 2.0:将值存储在Http.Context中 看起来类更改为2.2.1,它有更多的构造函数参数,如下所示: https://github.com/playframework/playframework/blob/2.1.x/framework/src/play/src/main/java/play/mvc/Http.java 这是我的代码: import java.util.Map; import java.util.Collections; import org.junit.*; import static org.mockito.Mockito.*; import play.mvc.*; import play.test.*; import play.mvc.Http; import play.mvc.Http.Context; import play.api.mvc.RequestHeader; import static play.test.Helpers.*; import static org.fest.assertions.Assertions.*; public class TemplateTests { public static FakeApplication app; private final Http.Request request = mock(Http.Request.class); @BeforeClass public static void startApp() { […]

你将如何测试连接池

我在Java中实现了一个非常简单的ConnectionPool。 它没有花哨的function,只是获取/释放连接方法。 我怎样才能测试它是否有效? 我知道有很多连接池可以在那里使用,它比我要做的更可靠,但我只是想练习理解连接池的工作方式。 谢谢! 这是代码,以防它有帮助: public class ConnectionPoolImpl implements ConnectionPool { private Vector connections; // The connections container String url; String username; String password; /** * Instanciates a new MySQLConnectionPool * @param nbConnectionsMax */ public ConnectionPoolImpl(String DBUrl, String username, String password){ this.connections = new Vector(); this.url = DBUrl; this.username = username; this.password = password; […]

使用Mockito,如何拦截void方法上的回调对象?

我正在使用mockito来测试遗留的JAAS / LDAP登录模块。 javax.security.auth.callback.CallbackHandler接口定义了该函数: void handle(javax.security.auth.callback.Callback[] callbacks) 我期待callbacks包含一个NameCallback ,这是需要操作以通过测试的对象。 有没有办法有效地模拟这个,或者我会更好地使用CallbackHandler的存根实现?

使用数据填充ResultSet的简便方法

我想模拟一个ResultSet。 认真。 我正在重构一个从ResultSet中解析数据的大型复杂代码,我希望我的代码行为相同。 因此,我需要为重构的部分编写一个unit testing,以便能够对此进行测试。 谷歌搜索后,我想出了两个想法: 使用EasyMock,编写looooong模拟序列。 非常糟糕的解决方案:难以添加初始数据,难以更改数据,大测试调试的好处。 使用Apache Derby或HSQLDB创建内存数据库,从文件或String数组填充它,查询一些神奇的InMemoryDBUtils.query(sql)。 然后使用该ResultSet。 不幸的是,我没有找到任何神奇的InMemoryDBUtils来快速编写测试:-)。 IBM的文章“使用Derby进行持久性的隔离unit testing”似乎对我需要的东西很好,尽管…… 第二种方法看起来更容易,也更容易支持。 你有什么建议创建这样的模拟? (尽管医生,当然:-)? 我错了眉毛一些银弹吗? 可能,DBUnit是这个的工具吗?

如何将JUnitPerf与JWebUnit和JUnit 4一起使用?

我对正确运行的Web应用程序进行了一系列function测试,但每个都需要使用@BeforeClass和@AfterClass注释提供的类级别设置和拆卸,因此需要JUnit 4.0或更高版本。 现在,我想使用少量的这些function测试来执行负载测试,这些测试模拟了大量请求Web应用程序相关页面的用户。 为了让每个用户在JWebUnit中拥有自己的“模拟浏览器”,我需要在JUnitPerf中使用TestFactory来实例化测试中的类,但由于JUnit 4测试是使用@Test注释而不是从TestCase派生的,所以我’获取TestFactory must be constructed with a TestCase classexceptionTestFactory must be constructed with a TestCase class 。 是否有人成功使用JUnitPerf及其TestFactory与JUnit 4? 什么是让它全部工作的秘诀?

如何使用PowerMockito模拟私有静态方法?

我正在尝试模拟私有静态方法anotherMethod() 。 见下面的代码 public class Util { public static String method(){ return anotherMethod(); } private static String anotherMethod() { throw new RuntimeException(); // logic was replaced with exception. } } 这是我的测试代码 @PrepareForTest(Util.class) public class UtilTest extends PowerMockTestCase { @Test public void should_prevent_invoking_of_private_method_but_return_result_of_it() throws Exception { PowerMockito.mockStatic(Util.class); PowerMockito.when(Util.class, “anotherMethod”).thenReturn(“abc”); String retrieved = Util.method(); assertNotNull(retrieved); assertEquals(retrieved, “abc”); […]

如何编写unit testing以确保我的基于日期/时间的代码适用于所有时区和/ DST?

我正在使用JodaTime 2.1,我正在寻找一种unit testing代码的模式,该代码执行日期/时间操作以确保它在所有时区都表现良好且独立于DST 。 特别: 我如何模拟系统时钟(所以我不必模拟我调用new DateTime()以获取当前时间的所有位置) 如何在默认时区执行相同操作?

如何从NetBeans运行JUnit?

我一直在努力了解如何开始编写和运行JUnit测试。 当我读这篇文章时: http://junit.sourceforge.net/doc/testinfected/testing.htm 我得到了页面的中间部分,他们写道:“JUnit带有一个图形界面来运行测试。在窗口顶部的字段中键入测试类的名称。按”运行“按钮。 我不知道如何启动这个程序。 我甚至不知道它在哪个包中,或者你如何从IDE运行库类。 卡住了,我尝试了这个NetBeans教程: http://www.netbeans.org/kb/docs/java/junit-intro.html 它似乎没问题,但后来我注意到本教程中用于测试Java类库的菜单选项与常规Java应用程序或Java Web App的菜单选项不同。 因此,本教程中的说明一般不适用。 我正在使用NetBeans 6.7,我已将JUnit 4.5导入库文件夹。 在编写测试后,运行JUnit的正常方法是什么? JUnit FAQ描述了来自Console的过程,如果这是典型的,我愿意这样做,但考虑到我在netbeans中可以做的所有事情,似乎很难相信没有更简单的方法。 非常感谢。 编辑:如果我右键单击项目并选择“测试”,则输出为: init: deps-jar: compile: compile-test: test-report: test: BUILD SUCCESSFUL (total time: 0 seconds) 这并不会使我成为测试的理想输出,特别是因为这不会改变测试条件是否为真。 有任何想法吗?

如何测试复杂对象图的相等性?

假设我有一个unit testing,想要比较两个复杂的对象是否相等。 对象包含许多其他深层嵌套的对象。 所有对象的类都有正确定义的equals()方法。 这并不困难: @Test public void objectEquality() { Object o1 = … Object o2 = … assertEquals(o1, o2); } 麻烦的是,如果对象不相等,你得到的只是失败,没有迹象表明对象图的哪个部分不匹配。 调试这可能是痛苦和令人沮丧的。 我目前的方法是确保一切都实现toString() ,然后像这样比较相等: assertEquals(o1.toString(), o2.toString()); 这使得更容易追踪测试失败,因为像Eclipse这样的IDE有一个特殊的可视比较器,用于在失败的测试中显示字符串差异。 基本上,对象图以文本方式表示,因此您可以看到差异的位置。 只要toString()编写得很好,就可以了。 不过,这有点笨拙。 有时你想设计toString()用于其他目的,比如日志记录,也许你只想渲染一些对象字段而不是所有对象字段,或者根本没有定义toString(),依此类推。 我正在寻找更好的比较复杂对象图的方法。 有什么想法吗?