Tag: unit testing

TestNG + Mockito + PowerMock – verifyStatic()不起作用

我是新的TestNG和一般的unit testing。 我使用的是TestNG 6.9.6和Mockito 1.10.19以及PowerMock 1.6.4。 我想validationMyService类中的myMethod()方法是否在内部使用正确的参数调用静态方法Util.myStaticMethod 。 由于Mockito本身不支持静态方法的validation,因此我使用PowerMock。 我的测试类如下所示: public class MyTest { private MyService myService; @Captor ArgumentCaptor argCaptor; @BeforeMethod public void setup() { MockitoAnnotations.initMocks( this ); myService = new MyService(); } @Test @PrepareForTest(MyService.class) public void myTest() { PowerMockito.mockStatic(Util.class); myService.myMethod(“arg”); PowerMockito.verifyStatic(10); Util.myStaticMethod(anyString()); } } 由于myMethod调用静态方法Util.myStaticMethod()一次,因此预计此测试将失败。 但是当我运行测试时,它总是通过,无论我传递给PowerMockito.verifyStatic()值是什么。 另外,如果我在这个类中编写另一个测试方法然后运行测试,我会收到以下错误 org.mockito.exceptions.misusing.UnfinishedVerificationException: Missing method call for verify(mock) here: […]

从自动化测试套件中排除一些JUnit测试

在编写与外部资源交互的代码(例如使用Web服务或其他网络操作)时,我经常构造类,以便它也可以使用文件或其他输入方法“存根”。 因此,我最终使用存根实现来测试系统的其他部分,然后使用一个或两个专门测试调用Web服务的测试。 问题是我不想从Jenkins或我运行项目的所有测试(例如“gradle test”)调用这些外部服务。 某些服务有副作用,或者可能无法供所有开发人员访问。 现在我只是取消注释然后重新评论这些特定测试方法的@Test注释,以启用和禁用它们。 启用它,手动运行以检查它,然后记得再次注释掉它。 // Uncomment to test external service manually //@Test public void testSomethingExternal() { 有没有更好的方法呢? 编辑:对于手动unit testing,我使用Eclipse并且能够右键单击测试方法并执行Run As – > JUnit测试。 但是,如果没有(未注释的)注释,这是行不通的。

如何获取javax.ws.rs.core.UriInfo的实例

是否有任何javax.ws.rs.core.UriInfo实现,我可以用它来快速创建一个实例进行测试。 这个界面很长,我只需要测试一下。 我不想在这个界面的整个实现上浪费时间。 更新:我想为类似于此的函数编写unit testing: @GET @Path(“/my_path”) @Produces(MediaType.TEXT_XML) public String webserviceRequest(@Context UriInfo uriInfo);

在selenium中绕过capcha

我登录网站时有很多自动化测试运行我是unit testing,但我不能(没有权限)从登录页面中删除capcha。 有没有办法使用selenium 2.0这样我可以启动WebDriver实例,比如firefox,然后手工执行capcha然后让WebDriver(我使用服务器的java jar)从那里“接管”? 谢谢!

被测单元:Impl还是接口?

假设我有实现它的接口和实现类,我想为此编写unit testing。 我应该测试什么接口或Impl? 这是一个例子: public interface HelloInterface { public void sayHello(); } public class HelloInterfaceImpl implements HelloInterface { private PrintStream target = System.out; @Override public void sayHello() { target.print(“Hello World”); } public void setTarget(PrintStream target){ this.target = target; } } 所以,我有HelloInterface和HelloInterfaceImpl来实现它。 什么是被测单元接口或Impl? 我认为它应该是HelloInterface。 考虑下面的JUnit测试草图: public class HelloInterfaceTest { private HelloInterface hi; @Before public void setUp() […]

Mockito Spy’ing对被unit testing的物体

窥探正在进行unit testing的物体是否有代码气味? 例如,假设我有一个LineCounter类,其作用是简单地计算字符串中的行数。 – class LineCounter { public int getNumLines(String string) { String metadata = getStringMetadata(string); // count lines in file return numLines; } /** Expensive operation */ protected String getStringMetadata(String string) { // do stuff with string } } 现在我想为此编写一个JUnit 4测试来测试getNumLines方法,同时getNumLines昂贵的getStringMetadata调用。 我决定使用Mockito的间谍机制让getStringMetadata返回一个虚拟值。 class LineCounterTests { @Test public void testGetNumLines() { LineCounter lineCounterSpy = Mockito.spy(new […]

TestNG:如何测试强制例外?

我想编写一个TestNG测试来确保在特定条件下抛出exception,如果没有抛出exception,则测试失败。 有没有必要创建一个额外的布尔变量的简单方法? 关于此主题的相关博客文章: http : //konigsberg.blogspot.com/2007/11/testng-and-expectedexceptions-ive.html

Apache DefaultHttpClient调用导致“java.lang.RuntimeException:Stub!”

我正在将我的脚趾浸入Android开发中。 我有一个项目将与RESTful资源接口,我正在试图找出如何通过HTTP上的params进行基本GET。 从我读过的所有内容来看,共识似乎都支持HTTPClient优于HttpURLConnection。 我编写了一个包装类,其中包含一个方法,该方法负责实例化密钥对象以使用HTTPClient发出请求: public String get() { String responseString = null; HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(); try { get.setURI(new URI(this.baseURL())); } catch (URISyntaxException e1) { e1.printStackTrace(); } HttpResponse response; try { response = client.execute(get); responseString = readResponse(response.getEntity()); if(response != null) { System.out.println(responseString); } } catch(ClientProtocolException e) { e.printStackTrace(); } […]

如何从可执行jar中的main()运行TestNG测试?

我有一个可执行的JAR,它包含所有依赖项和测试类。 我已经确认在执行jar时会调用main()方法。 我正在尝试向main()添加代码,以便我可以运行特定的TestNG测试类。 从TestNG.org上的文档来看,这似乎就是这样做的: TestListenerAdapter tla = new TestListenerAdapter(); TestNG testng = new TestNG(); testng.setTestClasses(new Class[] { com.some.path.tests.MyTests.class }); testng.addListener(tla); testng.run(); 我的文件夹结构很典型: /src/main/java/Main.java /src/test/java/com/some/path/tests/MyTests.java 但是,当我尝试编译它时,我收到此错误: java: /src/main/java/Main.java:46: package com.some.path.tests does not exist 无论如何我可以改变我的项目,以便main()中的testng.setTestClasses()可以访问测试类吗?

在Windows 7中将新JFileChooser创建为本地系统帐户时Win32ShellFolder2.access中的NPE

我已经为创建JFileChooser的Swing GUI编写了unit testing。 由于unit testing作为服务在构建服务器上运行,因此unit testing需要作为本地系统帐户运行。 但是,当unit testing尝试创建新的JFileChooser时,它们会抛出NullPointerException。 我把问题简化为运行以下主类作为本地系统帐户(不是真正的代码) package com.example.mcgr; import javax.swing.*; import java.io.IOException; public class FileChooserAsSystem { public static void main(String[] args) throws IOException { SwingUtilities.invokeLater(new Runnable() { public void run() { JFileChooser fileChooser = new JFileChooser(); fileChooser.showDialog(null, “Ok”); } }); } } 使用以下构建文件。 如果我将代码作为我自己的用户帐户运行,则会出现JFileChooser(这就是我想要的所有内容,因为上面的精简代码显然在此后没有做任何事情)。 如果我将上述代码作为系统帐户运行(例如,通过安装PsTools / PsExec并运行PsExec.exe -s -i cmd.exe来启动cmd作为系统帐户然后运行jar,那么我得到以下堆栈跟踪: [java] Exception […]