我是Java新手,还在学徒阶段,真的很挣扎。我想为此写一个junit 5测试:(我应该补充说,这个项目还没有完成,我的工作方式,通过尝试创建一个游戏的二十一点,同时学习沿着的道路)
public Deck() {
ArrayList<Card> cards = new ArrayList<>();
//fill deck with cards
for (Suit suit: Suit.values()) {
for (Rank rank: Rank.values()){
cards.add(new Card(rank,suit));
};
}
HashSet<Card> deck = new HashSet<>(cards);;
现在我可以很容易地得到答案:System.out.println(deck.size());
但这是作弊。
我不知道如何编写一个测试,例如void thereAre52CardsInADeck(){ }
,而不只是把整个代码块放在那里。
有人能帮忙/提供建议吗?
编辑:我真的是全新的,相当新的编码句号,所以道歉。这是我学习练习的一部分。
1 -通过“System.out.println(deck.size())”作弊,我的意思是在我的Deck()类的末尾(即,而不是在junit测试类中)使用它是作弊,因为我想对所有内容进行单元测试
2 -我的西装类是:
public enum Suit {HEARTS, CLUBS, Diamonds, Spades}
我的等级是
public enum Rank {
ACE(1), DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10);
private final int rankValue;
private Rank(int rankValue) {
this.rankValue = rankValue;
}
public int getRankValue(){
return rankValue;
}
}
我的卡类是:
public class Card {
private final Rank rank;
private final Suit suit;
public Card (Rank rank, Suit suit) {
this.rank = rank;
this.suit = suit;
}
public Rank getRank() {
return rank;
}
public Suit getSuit(){
return suit;
}
@Override
public String toString(){
return rank + " of " + suit;
}
}
我现在的主要任务是:public class Main {
public static void main(String[] args){
Deck deck = new Deck();
}
}
我已经运行了这个项目,并且知道我可以使用System.out.println(deck.size())运行它,并且如果我删除.size(),我也会得到完整的列表,但是我还没有在Junit测试中成功地解决这个问题。
3条答案
按热度按时间wsxa1bj11#
你的代码显示了一个使用局部变量的构造函数。你不能对方法或构造函数的内部细节进行单元测试。
你应该对方法或构造函数或与其他对象方法的交互的预期输出进行单元测试(交互测试是一个“更高级别”的测试,但只有在你找到如何使用Mockito或其他库为你处理大部分内容之前。
如果你把代码保持在构造函数中,你就不能在那里进行单元测试,因为它没有副作用--除非你在
Suit.values()
和Rank.values()
(我猜都是enums
?)或者在Card
的构造函数中有意外的副作用。甚至堆在调用构造函数之前和之后都应该是相同的,因为所有对象都可能在调用该构造函数之后被垃圾收集。
ncgqoxb02#
告诉我这是你想要的吗?或者我可以修改,如果它不完全是你所要求的
j2cgzkjk3#
首先,在
Deck
类中不需要同时使用cards
和deck
,只需使用然后你需要做的是创建一个测试类,首先声明junit5上的依赖项,这里是针对maven的:
(See here(如果您正在使用其他依赖项管理工具)
然后这样写测试:
附加:
由于您的卡存储在
Set
中,这将确保没有重复的卡,但只有在您覆盖Card
类中的equals
方法时才有效,因此在Card
中添加以下代码然后你可以通过为
Card
创建一个测试类来测试hat,即CardTest
,并在其中包含以下2个测试:在所有这些之后,你已经测试了你有52个不同的卡在你的甲板上。