我有一个java类,当我们运行时,将执行批处理文件。我有一个变量isSuccessful
(布尔值),它将显示true或false,指示批处理文件是正确还是错误地执行了命令。现在,真或假输出仅显示在控制台中。我希望当我输入网址(例如localhost:8080/runbatchfile
)
到目前为止,我有这些代码:
RunBatchfile.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class RunBatchFile {
@Test
public void RunningBatchCommand() {
String filePath = "C:/Users/attsuap1/Desktop/test.bat";
try {
Process p = Runtime.getRuntime().exec(filePath);
int exitVal = p.waitFor();
boolean isSuccessful = true;
if (exitVal == 0)
{
isSuccessful = true;
} else {
isSuccessful = false;
}
System.out.println(isSuccessful);
} catch (Exception e) {
e.printStackTrace();
}
}
}
BatchFile.java
public class BatchFile extends RunBatchFile {
private static String isSuccessful;
public BatchFile(String isSuccessful) {
this.isSuccessful = isSuccessful;
}
public static Object getIsSuccessful() {
System.out.println(isSuccessful);
return isSuccessful;
}
}
这个BatchFile.Java类给了我这个错误:
java.lang.Exception:测试类应该只有一个public 零参数构造函数 org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:171) 在 org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:148) 在 org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:127) 在org.junit.runners.ParentRunner.validate(ParentRunner.java:416)at org.junit.runners.ParentRunner。(ParentRunner.java:84)at org.junit.runners.BlockJUnit4ClassRunner。(BlockJUnit4ClassRunner.java:65) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner。(SpringJUnit4ClassRunner.java:138) 在 org.springframework.test.context.junit4.SpringRunner。(SpringRunner.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 来自java.lang.reflect.Constructor.newInstance(未知来源) 在 org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
BatchFileController.java
@RestController
public class BatchFileController {
private static final String template = "Result, %s";
private static String getIsSuccessful;
@RequestMapping("/runbatchfile")
@ResponseBody
public BatchFile batchFile(@RequestParam(value = "result") String result) {
return new BatchFile(String.format(template, result));
}
}
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我是新手。我尽我所能。有人请帮我纠正我的代码。非常感谢你。
答案 0 :(得分:1)
在BatchFile
中创建一个新的构造函数,它将调用方法contextLoads
。让你的BatchFileController
类调用这个新的构造函数。
我还建议您删除RunBatchFile
中的所有注释,因为这些注释适用于Junits,这就是您获得例外的原因。