我目前正在为策略设计模式编写单元测试。我将系统输出与assertEquals方法中的一个字符串进行比较。输出看起来相同,但我的测试仍然失败。我在想我忘记了一些新的行或标签?Java:测试包括“新行”与assertEquals系统输出
我的单元测试:
import static org.junit.Assert.*;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class MiniDuck1Test {
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@After
public void cleanUpStreams() {
System.setOut(null);
System.setErr(null);
}
@Test
public void testDuck1() {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
assertEquals("Quack\nI'm flying!!\nI can't fly\nI'm flying with a rocket", outContent.toString().trim());
}
}
输出(第二和第三线出现红):
Quack
I'm flying!!
I can't fly
I'm flying with a rocket
编辑:
最快的解决办法似乎是增加一个“\ r“在我的”\ n“前面。多个答案告诉我这需要在Windows上完成。应用在这之后我的assertEquals样子:
assertEquals("Quack\r\nI'm flying!!\r\nI can't fly\r\nI'm flying with a rocket", outContent.toString().trim());
另外:我忘了提,大部分代码都来自书:“Head First设计模式”,由埃里克·弗里曼,伊丽莎白·罗布森,伯特·贝茨和凯西塞拉利昂。
而不是'Assert.equals()','TestCase.equals()'在显示不匹配字符串的错误位置做了很好的工作。只需相应地编辑您的进口报表。 –
尝试比较字符串的长度。有些人认为这可能是'\ r \ n',或者是其他一些无形的差异。 – shmosel