如何将String值转换为InputStreamReader?
是否有一种简单的方法可以避免处理文本编码问题?
我正在为java编程竞赛编写一些代码.程序的输入是使用stdin给出的,输出是在stdout上.你们如何测试在stdin/stdout上运行的程序?这就是我的想法:
由于System.in的类型为InputStream,而System.out的类型为PrintStream,因此我使用此原型在func中编写了我的代码:
void printAverage(InputStream in, PrintStream out)
Run Code Online (Sandbox Code Playgroud)
现在,我想用junit来测试它.我想使用String伪造System.in并在String中接收输出.
@Test
void testPrintAverage() {
String input="10 20 30";
String expectedOutput="20";
InputStream in = getInputStreamFromString(input);
PrintStream out = getPrintStreamForString();
printAverage(in, out);
assertEquals(expectedOutput, out.toString());
}
Run Code Online (Sandbox Code Playgroud)
实现getInputStreamFromString()和getPrintStreamForString()的"正确"方法是什么?
我这让它变得比它需要的更复杂吗?
我有一个String[]数组,我需要将其转换为InputStream.
我见过Byte[]->InputStream和String-> InputStream,但没有见过这个。有小费吗?
所以这是代码:
public int foo(InputStream in) {
int counter = 0;
Scanner scanner = new Scanner(in);
while(scanner.hasNextLine()) {
counter++;
scanner.nextLine();
}
return counter;
}
Run Code Online (Sandbox Code Playgroud)
通常,我会将FileInputStream传递给此方法,但是我希望能够在不访问物理文件的情况下对其进行测试。
我应该模拟File对象吗?如何实施
@Test
public void shouldReturnThree(){
}
Run Code Online (Sandbox Code Playgroud) 给定一个字符串:
String xml = "<test/>";
Run Code Online (Sandbox Code Playgroud)
如何将其转换为InputStreamGroovy中的?
目前,我使用:
IOUtils.toInputStream(xml, StandardCharsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是我正在Groovy中寻找一种更短且无依赖的方法。
我当然知道Java的答案,但是它涉及到丑陋的创建ByteArrayInputStream。我正在寻找解决该问题的GDK方法。
我所做的 JUnit 测试存在问题。如果传递的方法不支持标记/重置,我正在测试的方法InputStream应该抛出异常。InputStream
我遇到的问题是,当InputStream不支持标记/重置的传递(发布在下面)时,确保抛出异常的测试不断抛出AccessDeniedException.
public class IOTest{
@Rule
public TemporaryFolder tempFolder = TemporaryFolder()
@Before
public void createFolder() throws IOException {
Files.createDirectories(tempFolder.getRoot().toPath().resolve("testFile"));
}
@Test(expected = IllegalArgumentException.class)
public void testDetectCharsetOnlyAcceptsMarkResetSupportedInputStreams() throws IOException {
final Path testPath = tempFolder.getRoot().toPath().resolve("testFile");
final InputStream testStream = Files.newInputStream(testPath);
IO.detectCharset(testStream);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我遇到的问题与访问临时文件夹有关,但我不知道如何规避这个问题。
这是我运行此测试时打印的堆栈跟踪:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.nio.file.AccessDeniedException>
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at …Run Code Online (Sandbox Code Playgroud) java ×6
inputstream ×3
string ×3
junit ×2
stream ×2
arrays ×1
groovy ×1
mocking ×1
unit-testing ×1