gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:50:57 25 4
gpt4 key购买 nike

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

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

@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;
}
}

在预集成 @Before 步骤中,我要求提供将用于三个客户端中的两个( SCPWebHDFS )的用户名和密码。今年晚些时候,我们公司可能会实现 Kerberos,这可能会变得没有必要;这是我发现的唯一能让人们在此期间感到快乐的方法。是的,我知道我正在绕过 SSL 的用处,但我知道我正在连接的服务器,它是一个防火墙严密的内部网络,这主要是一个概念证明。如果考虑将其投入生产,我会提出担忧。

问题:当我单独运行集成测试 Junit 类时,一切正常。系统会提示我输入用户名和密码,并且我可以输入它们。之后类中的长测试用例将被执行,并且我已经验证了客户端实际上正在工作。没问题。然后,当我使用“integration-test”运行 Maven 构建时,故障安全插件会在需要运行测试时停止。我通过 Eclipse 运行这一切:

-------------------------------------------------------
T E S T S
-------------------------------------------------------

打印标题,然后构建看起来会空闲\等待\停止。我什至尝试查看 Eclipse 中的其他控制台窗口,看看 JUnit 是否在其他地方输出 System.out.print 语句。

最佳答案

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

mvn 集成测试 -Dusername=XXX -Dpassword=YYYY

要使其与 m2e 一起使用,请在 pom.xml 中的故障安全插件声明中使用它:

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

然后将变量放入“运行方式”配置属性中的“VM”字段中,如下所示:

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

然后,您将用 System.getProperty 调用替换 System.in 调用。 (例如 System.getProperty("用户名"))。

关于java - Maven 集成测试期间输出\输入在 Junit 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com