例如,我有2个Maven项目.一个是"项目 - 父母".另一个是"项目孩子".显然,"项目 - 孩子"是"项目 - 父母"的子项目.
"project-parent"具有log4j的依赖关系.但是我想把它从"项目孩子"中排除.有办法吗?
你可能会说我应该将log4j从"project-parent"移动到"project-child".这是完全正确的.但我的假设是我不能修改"项目 - 父母"的POM.
提前致谢.
我试图使用Powermock和Mockito来模拟一个void静态方法来抛出异常,如下所示.但我遇到了一个问题.除非我使用相同的参数对Adder.add()进行两次调用,否则IOException不会抛出模拟的东西.
顺便说一句,我已经添加@RunWith(PowerMockRunner.class)并@PrepareForTest(Adder.class)在单元测试类.
class Adder{
public static void add(int i) throws IOException{
return;
}
}
@Test
public void testAdder() throws IOException{
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(12);
try {
Adder.add(11);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// assert things
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.:)
答案如下.
在咨询http://code.google.com/p/powermock/issues/detail?id=278之后,实际上上面的Adder.add(12)是设置模拟静态方法的一部分.这意味着在使用参数12调用Adder.add()时,将抛出IOException.这很难理解,对吧?:)所以它应该写如下.
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
Run Code Online (Sandbox Code Playgroud) 例如,我有一个java类,如下所示.我将为doWork()编写一个单元测试,所以我想控制obj的行为.但很明显,obj是在内部实例化的.
我怎么写这个UT?现在我正在使用Junit + Mockito.
class ToBeTest{
public ToBeTest(){}
public boolean doWork(){
OtherObject obj=new OtherObject();
return obj.work();
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.:)
顺便说一句,现实是我正在为其他人的班级写UT.所以我不想改变它.它已通过集成测试进行了全面测试.
这是我的情况.我有一个AbstractController类.它有一个子类控制器.在AbstractController的一个方法中,实例化了一个新的ApplicationLock.我想在为Controller编写ut时模拟ApplicationLock.我写了一个如下的测试用例.
@test
public void testMethod(){
ApplicationLock mockLock=PowerMockito.mock(ApplicationLock.class);
PowerMockito.when(mockLock.tryObtain()).thenReturn(true);
PowerMockito.whenNew(ApplicationLock.class).withArguments(argThat(new IsFile()),anyString()).thenReturn(mockLock);
}
Run Code Online (Sandbox Code Playgroud)
我已经为测试类添加了必要的注释.
@RunWith(PowerMockRunner.class)
@PrepareForTest({AbstractController.class})
但是在运行此测试用例时出现以下错误.这是AbstractController中的静态初始化程序.
引起:com.acompany.controller.common.AbstractController中的java.lang.NullPointerException.(AbstractController.java:65)
private static final String DEFAULT_FOLDER = AbstractController.class.getProtectionDomain().getCodeSource()
.getLocation().getPath();
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪如下.
java.lang上的java.lang.Class.forName0(本机方法)中的java.lang.ExceptionInInitializerError,javassist上的javassist.runtime.Desc.getClassObject(Desc.java:44)中的java.lang.Class.forName(Class.java:169). run.Desc.getClassType(Desc.java:153)at javassist.runtime.Desc.getType(Desc.java:123)at javassist.runtime.Desc.getType(Desc.java:79)at com.acompany.controller.portfolio .controllerTest.testIncrementalFail(ControllerTest.java:195)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) :25)在java.lang.reflect.Method.invoke(Method.java:597)在org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)在org.powermock.modules.junit4.internal. impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:307)在org.junit.internal.runners.MethodRoadie $ 2.run(我 thodRoadie.java:86)org.junit.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl $ PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73)在Org.junit.internal的org.junm上,在org.junit.internal.runner.MethodRoadie.runTest(MethodRoadie.java:84)的org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) .runners.MethodRoadie.run(MethodRoadie.java:49)at org.powermock.modules.junit4.internal.impl.PowerMo ckJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)在org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl $ 1.run (PowerMockJUnit44RunnerDelegateImpl.java:120)在org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)在org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)在org.powermock. modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:118)位于org.powermock.modules的org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102). junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)在org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)在org.eclipse.jdt.internal. junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)在org.eclipse.jdt.internal.junit.runner. RemoteTestRunner.main(RemoteTestRunner.java:197)引起:com.acompany.controller.common.AbstractController中的java.lang.NullPointerException.(AbstractController.java:65)... 35更多
我从SVN检出了一个多模块Maven项目.我在Eclipse中安装了m2eclipse.然后我将项目导入Eclipse.一切都好.但是在我从SVN(Eclipse之外)更新我的Maven项目之后,Eclipse会给我很多错误和警告,除非我再次导入项目.这真的很烦人.我每次从SVN更新它时都必须导入项目.
有解决方案吗?
非常感谢.:)
我有一个java应用程序,它执行一些JMS发送和接收工作.但我发现了一个有趣的问题.例如,我为java.naming.provider.url设置了以下内容.
tcp://hostnameA.foo.bar:7222
Run Code Online (Sandbox Code Playgroud)
但是我得到了如下错误.仅包含主机名,而不是完全限定的域名.
javax.jms.JMSException: Failed to connect to the server at tcp://hostnameA:7222
Run Code Online (Sandbox Code Playgroud)
除非我手动在hosts文件中添加hostnameA,否则它将无法连接到Tibco服务器.
我该如何解决?
提前致谢.
例如,我知道我有一个名为"HelloWorld.java"的java文件.我不喜欢浏览包层次结构以最终找到它.我想有一种方法让我输入这个文件名并直接打开它.
谢谢.