在Maven集成测试期间,输出\输入在Junit中不起作用

时间:2015-10-26 15:24:02

标签: java eclipse maven junit m2e

我正在使用JUnit和一些我编写,修改或从现有代码库中获取的客户端,以将集成测试所需的文件推送到我想用于进行集成测试的系统。

这是preIntegration设置步骤。 Maven有自己的预集成步骤,但我认为它太不灵活了我想要的\需要\喜欢。

Float

在预集成@Before public void preIntegration() throws IOException, JSchException, UnsupportedOperationException, IllegalArgumentException, SecurityException, URISyntaxException, JSONException, RuntimeException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { if (!firstTimeSetupDone) { testConfig = new Properties(); testConfig.load(getClass().getResourceAsStream("/test-config")); oozieClient = new OozieClientWithBlocking( testConfig.getProperty("oozieUrl")); BufferedReader in = new BufferedReader(new InputStreamReader( System.in)); System.out.print("Username: "); String username = in.readLine(); System.out.print("Password: "); String password = in.readLine(); System.out.print("Host: "); String host = in.readLine(); secureContext = new SecureContext(username, host); secureContext.setPassword(password); secureContext.setTrustAllHosts(true); assertNotNull("Linux test file present", getClass().getResource("/file.txt")); URL resourceUrl = getClass().getResource("/file.txt"); System.out.println("Sending files to linux."); Scp.exec(secureContext, resourceUrl.getPath(), "/home/myUsername/file.txt"); SSLContextBuilder sslContextBuilder = new SSLContextBuilder(); TrustStrategy acceptAnyCertificate = new TrustStrategy() { public boolean isTrusted(final X509Certificate[] chain, String authType) throws CertificateException { return true; } }; sslContextBuilder.loadTrustMaterial(null, acceptAnyCertificate); SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory( sslContextBuilder.build()); BasicCredentialsProvider basicCredentialsProvider = new BasicCredentialsProvider(); Credentials credentials = new UsernamePasswordCredentials(username, password); basicCredentialsProvider.setCredentials(AuthScope.ANY, credentials); HttpClientBuilder httpClientFactory = HttpClientBuilder.create(); httpClientFactory .setDefaultCredentialsProvider(basicCredentialsProvider); httpClientFactory.setSSLSocketFactory(sslConnectionSocketFactory); CloseableHttpClient httpClient = httpClientFactory.build(); hdfsClient = new HDFSRestClient(httpClient, testConfig.getProperty("nameNodeHttps")); URL jar = getClass().getResource("/Utilities-1.4.0.jar"); System.out.println("Sending files to hdfs."); hdfsClient .create(jar.getPath(), "/user/myUsername/java-action-workflow/lib/Utilities-1.4.0.jar"); properties = new Properties(); properties.setProperty("user.name", username); System.out.println("Prep done."); firstTimeSetupDone = true; } } 步骤中,我要求提供一个用户名和密码,用于三个客户端中的两个(SCPWebHDFS)。今年晚些时候,我们公司可能会实施Kerberos,这可能会使这个不必要;在过渡期间,这是我发现能使人快乐的唯一方法。是的,我知道我绕过了SSL的有用性,但我知道我正在连接的服务器,它的内部网络严重防火墙,这是一个概念证明,主要是。如果考虑将其投入生产,我会提出疑虑。

问题:当我自己运行集成测试Junit类时,事情正常。我收到提示输入用户名和密码,我可以输入它们。在此之后,类中的长测试用例将被执行,并且我已经验证了客户端实际上正在工作。没问题。然后,当我使用“集成测试”运行maven构建时,故障安全插件只需在其测试需要运行时停止。我正在通过Eclipse运行这个:

@Before

标题打印,然后构建似乎空闲\等待\停止。我甚至试过浏览Eclipse中的其他控制台窗口,看看JUnit是否在其他地方吐出System.out.print语句。

1 个答案:

答案 0 :(得分:1)

我猜你的Test等待的原因是,它期待inputs。 要发送输入参数,您可以执行类似

的操作

mvn integration-test -Dusername=XXX -Dpassword=YYYY

要使用m2e,请在pom.xml中的failafe插件声明中使用它:

<configuration>
                        <systemPropertyVariables>
                        <username>${myUsername}</username>
                        <password>${myPassword}</password>
                        <host>${myHost}</host>
                        </systemPropertyVariables>
            </configuration>

然后将变量放入“VM”中。您的&#39; Run As&#39;中的字段配置属性如下:

-Dusername=myUsername
-Dpassword=myPassword
-Dhost=myHost

然后,您将使用System.getProperty调用替换System.in调用。 (例如System.getProperty(&#34; username&#34;))。