gpt4 book ai didi

java - 在 Junit 测试中打印出方法的输出

转载 作者:行者123 更新时间:2023-12-02 00:05:30 25 4
gpt4 key购买 nike

因此,对于一项作业,我们的任务是构建通用函数来处理对象。在本例中是 2 副不同的牌。一副是标准的 52 副扑克牌,另一副是我们选择的副牌。我选择了《星际迷航》下一代卡。 (免责声明,我对 junit 测试知之甚少。我的类(class)中从未涉及过它,我所知道的很少来自实验)无论如何,我有一个可以处理 X 数量牌的方法。我需要帮助弄清楚如何打印 junit 测试中方法的输出。这是我的 junit 测试代码和方法。

'''public void test_cardPile_dealNum() {
aceOfHearts = new StandardCard ("Hearts", "Ace");
aceOfDiamonds = new StandardCard ("Montrial", "Ace");
aceOfClubs = new StandardCard("Clubs", "Ace");
fedCaptain = new starTrekCards("Federation", "Jean Luc Picard");
fedFirstOff = new starTrekCards("Federation","Willian Riker");
fedDoctor = new starTrekCards("Federation", "Beverly Crusher");
fedCounciler = new starTrekCards("Federation","Diana Troy");
contArse = new starTrekCards ("Continuum", "Q");
romCommander = new starTrekCards("Romulan Star Empire", "Commander Sela");
romSupport = new starTrekCards ("Romulan Star Empire", "Kimara Cretak");
klingLeader = new starTrekCards ("Klingon Empire", "Chancelor Garon");

int number = 3;


CardPile test3 =new CardPile ();
LinkedStack Holder;

test3.add(aceOfHearts);
test3.add(aceOfDiamonds);
test3.add(aceOfClubs);
test3.add(fedCaptain);
test3.add(fedFirstOff);
test3.add(fedDoctor);
test3.add(fedCounciler);
test3.add(contArse);
test3.add(romCommander);
test3.add(romSupport);
test3.add(klingLeader);

Holder = test3.dealNumb(3);

System.out.println(Holder.toString());
}''''

和我的方法

'''

public LinkedStack<T> dealNumb(int number)
{
if(!card.isEmpty()){
LinkedStack<T> cardTwo = new LinkedStack<T>();
for(int i = 0; i< number; i++)
{
T count = card.top();
card.pop();

cardTwo.push(count);
}
return cardTwo;
}
else {
return null;
}
}'''

提前致谢

最佳答案

有句老话永远值得重复:

Anything that relies on human reliability is inherently unreliable.

每个人都会犯错误——你、我、每个人。当您运行上述测试时,您将依靠人类的可靠性来发现任何与预期不同的输出。这是不可靠的,并且错误会出现(更不用说对你来说非常无聊了!)

单元测试(例如 JUnit)的强大之处在于它们是自动化的。在商业中,它们通常完全无人值守地运行,内置于构建过程中,每当有人提交一些代码时,该构建过程就会在某些服务器计算机的后台自动运行。

因此,测试不是为了显示结果供人类检查,而是测试本身检查结果,通常是通过“Assert”语句。您会发现 Junit 有其中一些(“AssertThat”、“AssertEquals”等),并且 Hamcrest 也很有用(请参阅 http://hamcrest.org/JavaHamcrest/)

因此,您想要做的不是 println,而是断言您已经获得了您期望的三张卡片,并且这些卡片不再在您的 CardPile 中 - 例如:

// nb variable names like "holder" should start with lower-case
AssertThat(holder, is(equalTo(List.of(romCommander, romSupport, klingLeader))));
AssertThat(test3.size(), is(equalTo(8))));
AssertThat(test3.pop(), is(equalTo(contArse))));

(顺便说一句,is(equalTo(List.of) 可能不适用于您的 LinkedStack 实现,但希望您明白:) )

此外,就我个人而言,我总是更喜欢 AssertThat 而不是 AssertEquals,因为它更具可读性,并且可以避免人们编写类似以下内容的常见错误:

AssertEquals(test3.size(), 3);

这是错误的做法!预期的结果应该是第一位的,所以它应该是:

AssertEquals(3, test3.size());

...但最好坚持使用 AssertThat

关于java - 在 Junit 测试中打印出方法的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159447/

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