相关疑难解决方法(0)

277
推荐指数
4
解决办法
17万
查看次数

如何将Reader转换为InputStream,将Writer转换为OutputStream?

是否有一种简单的方法可以避免处理文本编码问题?

java stream

87
推荐指数
8
解决办法
15万
查看次数

测试从stdin读取并写入stdout的java程序

我正在为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()的"正确"方法是什么?

我这让它变得比它需要的更复杂吗?

java junit mocking

9
推荐指数
1
解决办法
1万
查看次数

如何在 Java 中将 String[] 数组转换为 InputStream

我有一个String[]数组,我需要将其转换为InputStream.

我见过Byte[]->InputStreamString-> InputStream,但没有见过这个。有小费吗?

java arrays string inputstream

2
推荐指数
1
解决办法
1万
查看次数

如何对使用Scanner和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)

java unit-testing inputstream fileinputstream

2
推荐指数
1
解决办法
2391
查看次数

在Groovy中将字符串转换为InputStream

给定一个字符串:

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方法。

string groovy inputstream

1
推荐指数
1
解决办法
2226
查看次数

使用 TemporaryFolder 的 JUnit 测试中的 AccessDeniedException

我所做的 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 junit access-denied

0
推荐指数
1
解决办法
5266
查看次数