当前位置: 首页 > 知识库问答 >
问题:

如何为使用JUNIT方法中的字符串和数组之和的IF语句编写测试

翟卓君
2023-03-14

我需要测试BasketBallGame类,ive编写了多个工作的测试,现在我想测试方法中的最后一个IF语句:public BasketResult play(String category){}

我已经编写了另外两个IF语句的测试,并使用Mockito来模拟ShotTumpt方法。

@ParameterizedTest
    @CsvSource({ "0, 1,0", "1,1,1", "0, 0,1" })
    public void MockShotAttempt(int firstValue, int secondValue, int derdeWaarde) {
        Mockito.when(inHoop.ShotAttempt(3)).thenReturn(new int[] {firstValue,secondValue,derdeWaarde});         
    }

    @ParameterizedTest
    @NullAndEmptySource
    @ValueSource(strings = {"        ", "TodDDleR", "LoWWeR","#!|@" })
    public void Invalid_EmptyCategory(String category) {
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            BasketBallGame.Play(category);
        });
        
    }

public class BasketResult {

    private final boolean won;
    private final int amountInHoop;

    BasketResultaat(boolean won, int amountInHoop) {
        this.won = won;
        this.amountInHoop = amountInHoop;
    }

    public boolean isWon() {
        return won;
    }

    public int getAmountInHoop() {
        return amountInHoop;
    }

}

import java.security.SecureRandom;

public class InHoop {

    private final SecureRandom random = new SecureRandom();

    public int[] shotAttempt(int amountAttempts) {
        int[] score = new int[amountAttempts];
        for (int index = 0; index < amountAttempts; index++) {
            score[index] = random.nextInt(2); // 1 = in hoop, 0 = not in hoop
        }
        return score;
    }

}
import java.util.Arrays;

public class BasketBallGame {
    private InHoop inHoop;
    private final int AMOUNT_TRIES = 3;
    private final String TODDLER = "toddler";
    private final String LOWER = "lower";

    public BasketBallGame() {
        this(new InHoop());
    }

    public BasketBallGame(InHoop inHoop) {
        this.inHoop = inHoop;
    }

    public double Calculate(int x, double y) {
        if (x <= 0 || y < 0)
            throw new IllegalArgumentException("x must be stricly positive and y must be positive");
        return (AMOUNT_TRIES * 10) - x - y;
    }

    public BasketResult play(String category) {
        if (category == null || category.isBlank()) {
            throw new IllegalArgumentException("category must be filled in");
        }

        if (!categorie.equalsIgnoreCase(TODDLER) && !categorie.equalsIgnoreCase(LOWER)) {
            throw new IllegalArgumentException("INVALID category");
        }
        int[] result = inHoop.shotAttempt(AMOUNT_TRIES);

        int amountInHoop = Arrays.stream(result).sum();
        // IF toddler And 1x in hoop ==> WIN 
        // IF LOWER AND 2X IN HOOP ==> WIN
        if ((category.equals(TODDLER) && amountInHoop >= 1)
                || (categorie.equals(LOWER) && amountInHoop >= 2)) {
            return new BasketResult(true, amountInHoop);
        }

        // did not win 
        return new BasketResult(false, amountInHoop);
    }
}

共有1个答案

微生欣怡
2023-03-14

注意@injectmocks@mock
另外,语句initmocks也是必要的。

@InjectMocks
BasketBallGame basketBallGame;

@Mock
private InHoop inHoop;

@BeforeEach
void before() {
    MockitoAnnotations.initMocks(this);
}

@ParameterizedTest
@CsvSource({
        "toddler, '0,0,0', false",
        "toddler, '1,0,0', true",
        "toddler, '1,1,0', true",
        "lower,   '1,0,0', false",
        "lower,   '1,1,0', true",
        "lower,   '1,1,1', true",
})
public void TestLastIfStatement(String category, String scoreList, Boolean winExp) {
    int[] scoreArr = Arrays.stream(scoreList.split(",")).map(String::trim).mapToInt(Integer::parseInt).toArray();
    int sumExp = Arrays.stream(scoreArr).sum();

    when(inHoop.shotAttempt(anyInt())).thenReturn(scoreArr);

    BasketResult result = basketBallGame.play(category);

    assertEquals(winExp, result.isWon());
    assertEquals(sumExp, result.getAmountInHoop());
}
 类似资料:
  • 问题内容: 我有应该测试的方法。代码(当然,某些部分被剪切): 问题:如何在使用Mockito和JUnit的方法中检查if语句?我想将相等的日期传递给方法,然后检查我的if语句是否正常工作。 问题答案: 如果您确实想要 纯 单元测试而不是集成测试,则可以依靠注释来模拟服务并将模拟插入到的实例中。 然后,您可以提出3个测试: 日期正确无误的一项测试, 日期正确但相等的另一个 最后一个日期不正确的日期

  • 如何为写在服务或控制器类中的方法中的日志语句编写JUnit测试用例。

  • 问题内容: 我想编写一种方法来判断string 是否是的子字符串。 要求仅使用 和的 方法 。 例如 不能使用。 这是我到目前为止所得到的。 测试类是: 它失败,因为它返回true。 问题答案: 如果第一个字符匹配,则代码返回true。您需要将第一个字符串的所有字符包含在第二个字符串的子字符串中。 编辑: 我的原始代码是错误的。这是正确的代码:

  • 我刚开始在大学课程中学习Java。如果/然后声明还没有涵盖,但我想我可以自己试试。我最终发现了一些语法错误,我认为我已经修复了这些错误,但现在当我尝试用整数添加字符串时,似乎会出现操作数错误。 但是,我在最后3个print语句中出现了一个错误,我认为这是因为我试图组合字符串和整数。我怎么解决这个?

  • 我有一个程序,显示与名称和用户需要输入他们的字段。我怎么测试这个? AssertionError:JSON路径“$.FirstName”处没有值,异常:JSON不能为null或空 我的测试: storetest.java

  • 我有两个问题。 ①当useState初始值真假时,if语句如何适应下面? 比如说。。 ②当if语句为true和false时,如何使setGoodBotton从React钩子和if语句适应下面? 例如…(这不是工作)