Tag: mocking

以编程方式为Spring创建JNDI DataSource

我有一个现有的基于Spring的Web应用程序,它具有使用JNDI定义的数据源,我正在尝试创建一个独立的应用程序来使用bean。 如何在独立应用程序中以编程方式创建JNDI条目和数据库属性? public static void main(String[] args) { // this throws an error since the JNDI lookup fails – can I programmatically define the database properties here? ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”); UserService userService = ctx.getBean(UserService.class); User user = userService.findUserById(“jdoe”); System.out.println(“display name: ” + user.getDisplayName()); } 编辑: 我尝试过类似的东西,但现在收到错误“javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名” public static void main(String[] args) { setupJNDI(); […]

如何在对模拟的不同调用中返回不同的值?

我有以下代码从DB获取当前计数器值。 然后它更新DB中的计数器,然后再次检索该值。 int current = DBUtil.getCurrentCount(); DBUtil.updateCount(50);// it updates the current count by adding 50 int latest = DBUtil.getCurrentCount(); 我想以这样的方式模拟静态方法,即第一个调用应返回100,第二个调用应返回150.如何使用PowerMockito实现此目的? 我正在使用TestNG,Mockito和PowerMock。

使用JMockit模拟测试类的私有方法

我想模拟一个被测试类的私有方法但是方法在调用方法之后首先返回false两次,它应该返回false。 这是我试过的代码。 这是正在测试的类 public class ClassToTest { public void methodToTest() { Integer integerInstance = new Integer(0); boolean returnValue= methodToMock(integerInstance); if(returnValue) { System.out.println(“methodToMock returned true”); } else { System.out.println(“methodToMock returned true”); } System.out.println(); } private boolean methodToMock(int value) { return true; } } 考试class import org.junit.Test; import static mockit.Deencapsulation.*; import mockit.*; public class TestAClass { @Tested […]

我可以模拟一个超类方法调用吗?

有时候,你想要测试一个类方法,并且你希望在调用超类方法时做一个期望。 我没有找到一种方法来使用easymock或jmock在java中做这个期望(我认为这是不可能的)。 有一个(相对)干净的解决方案,用超类方法逻辑创建一个委托,然后设置它的期望,但我不知道为什么以及何时使用该解决方案?任何想法/例子? 谢谢

模拟假定存在的私有变量

如果没有在您正在测试的类中创建/初始化模拟对象,它是如何在运行时获取模拟对象的,它不是静态的(单例模式),或者您没有某种类型的测试构造函数可以挂钩? 在我正在编写一些unit testing的类中,我遇到了一个我尚未遇到/解决过的场景。 我有一个JMS资源( QueueConnectionFactory供参考,但它没关系),这是我正在测试的类的私有变量。 由于它具有javax.annotation.Resource注释,因此在运行时它被认为是可用的。 在测试期间,它不是,这就需要模拟这个对象。 它不是一个静态类,并没有以静态方式使用,如果它是我可以轻松地使用我遇到的各种静态模拟方法进行模拟。 由于资源永远不会在本地创建(在构造函数中或甚至在测试构造函数中),因此我无法传入Mock对象,因此在测试的运行时,使用mock而不是实际对象。 如何模拟此资源,以便在测试执行时,它将用于代替我正在测试的类中的私有@Resource对象? 作为参考,代码在QueueConnectionFactory上调用createConnection() ,因为Factory尚未初始化/ QueueConnectionFactory ,所以它会抛出空指针exception。 @Stateless public class Example{ @Resource(name = “jms/exampleQCF”) private QueueConnectionFactory queueFactory; … public void testMe(){ Connection connection = queueFactory.createConnection(); … } }

为嵌套对象生成unit testing用例的测试数据

在为任何企业级java服务编写unit testing用例的模拟依赖服务时,我发现为unit testing用例设置数据非常痛苦。 大多数情况下,这是开发人员不编写unit testing用例而非编写集成样式测试用例的最有说服力的理由。 如果服务依赖于其他几个服务(取决于它们各自的DAO)和它自己的DAO, when-thenReturn为一个合理嵌套的对象生成when-thenReturn子句变得相当费力,并且开发人员被认为采取了简单的方法并加载整个spring上下文并从直接源获取数据,这些数据可能并不总是提供可遍历所有必需代码路径的数据。 在此背景下,我的一位同事建议,为什么不运行样本集成测试,并使用方面,捕获所有相关数据点并将其序列化为XML表示,该表示可用于实现unit testing的测试数据案例。 令我们惊喜的是,我们在github上找到了一个名为TestDataCaptureJ的框架,它与此非常相似。 它使用方面来捕获数据点,并生成java代码来创建对象。 网站上显示的动机似乎非常贴切,我想知道是否有任何其他替代品可以提供类似的function。 而且,如果专家可以批评这种整体方法,那将是很好的。 此外,该项目大约2岁,并有一些我们不得不修复的错误,并希望将其作为一个mavenized github fork回来。 只需检查以确保其中一个着名的马厩也没有其他类似的倡议。 提前致谢!

Mockito:如何在不模拟所有参数的情况下轻松存根方法

我有一个方法我想要存根但它有很多参数。 我怎样才能避免模拟所有参数但仍然存在方法。 例如: //Method to stub public void myMethod(Bar bar, Foo foo, FooBar fooBar, BarFoo barFoo, …..endless list of parameters..);

使用当前时间条件处理unit testing

我正在为我正在进行的项目中的某些实用程序类设置unit testing,其中一个类(包含许可信息)有一个方法可以根据当前时间进行一些确定。 即许可证包含到期日期,许可证字符串validation该日期,但查看许可证是否过期的实际逻辑基于当前时间。 public boolean isValid() { return isLicenseStringValid() && !isExpired(); } public boolean isExpired() { Date expiry = getExpiryDate(); if( expiry == null ) { return false; } Date now = new Date(); return now.after( expiry ); } 所以,我不知道该怎么做,因为’new Date()’不是一个静态的标准。 我不应该费心去测试’isValid’,只是分别测试’isLicenseStringValid()’和’getExpiryDate()’函数吗? 我是否只是在测试中使用许可证密钥,并且过期时间过长,以便在到期时切换作业? 我是否尝试将’new Date()’模拟为某些’getCurrentTime()’方法,以便我可以假装它现在是什么时间? 其他人通常对时间条件的测试做些什么?

在正在测试的同一个类中模拟私有方法

我有一个名为MyClass的Java类,我想用JUnit进行测试。 我想测试的公共方法methodB在同一个类中调用私有方法methodB来确定要遵循的条件路径。 我的目标是为methodA的不同路径编写JUnit测试。 此外, methodB调用一个服务,所以我不希望它在运行JUnit测试时实际执行。 模拟methodB并控制其返回的最佳方法是什么,以便我可以测试’methodA’的不同路径? 我更喜欢在编写模拟时使用JMockit,所以我对任何适用于JMockit的答案都特别感兴趣。 这是我的示例类: public class MyClass { public String methodA(CustomObject object1, CustomObject object2) { if(methodB(object1, object2)) { // Do something. return “Result”; } // Do something different. return “Different Result”; } private boolean methodB(CustomObject custObject1, CustomObject custObject2) { /* For the sake of this example, assume the CustomObject.getSomething() * method […]

模拟或模拟消息队列(JMS)

有一条消息(文本),我确定知道哪种格式和内容。 目前,实现了Java中用于从文件中解析和读取此消息的类。 在现实世界中,此消息将来自Message Queue。 现在我应该在我的本地PC上模拟,模拟或生成Message Queue以进行测试。 Java规范( java jms ): JMS provider: A messaging system that implements the JMS specification. JMS clients: Java applications that send and receive messages. Messages: Objects that are used to communicate information between JMS clients. 关于这个规范,我需要JMS提供者 。 JMS客户端 – 这是我读取消息的类。 消息本身我知道。 那么问题是如何启动消息队列? 我如何从Java代码中以programmaticaly方式模拟它? 我能以某种方式嘲笑它吗? 谢谢。