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

分支机构

平山
2023-03-14

我想做一个分支

package testing;
import java.util.*;

public class Exercise1 {

private String s;

public Exercise1(String s) {
    
    if (s == null || s.length() == 0)
        throw new IllegalArgumentException("s == null || s.lenght() == 0");

    this.s = s;
  }
}

在分支和cond测试中,我必须检查代码中的每一个条件,所以例如在我的例子中,当字符串预计为null并且size=0时,我必须进行测试。我在我的测试类中看到我必须这样做:

package testing
import static org.junit.*;
import org.junit.jupiter.api.Test;

class Exercise1Test{
    @Test(expected = IllegalArgumentException.class)
    public void stringNull() {
        new Exercise1(null);
    }    
}

Bur java无法识别“预期”。如何检查字符串是否为null,以便?

共有1个答案

阎京
2023-03-14

@Test(预期=...)只能与JUnit 4一起使用。JUnit 5有Assertions.assertThrows作为替换。它允许您断言不仅整个测试方法会抛出异常,甚至其中的一小部分也会抛出异常。这也已向后移植到JUnit 4.13。

您的测试方法将变成这样(对断言使用静态导入。assertThrows):

@Test
void stringNull() { // public not necessary in JUnit 5
    assertThrows(IllegalArgumentException.class, () -> new Exercise1(null));
}

但是它变得更好了-assertThrows返回抛出的异常。它允许您在抛出异常后对异常执行断言。它可以与JUnit 4的ExpectedException规则相比较。

@Test
void stringNull() {
    IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> new Exercise1(null));
    assertEquals("s == null || s.lenght() == 0", thrown.getMessage());
}

关于使用assertThrows的警告:只能在其中使用一个方法调用。例如,对于以下内容,您不知道是什么导致了IllegalArgumentException,即调用新练习,或调用constructMessage。

assertThrows(IllegalArgumentException.class, () -> new Exercise1(constructMessage()));

建议在调用assertThrows之前初始化此类参数:

String message = constructMessage();
assertThrows(IllegalArgumentException.class, () -> new Exercise1(message));

另一方面,您的导入混合了JUnit 4(org.JUnit。*)和JUnit 5(org.JUnit.jupiter.api)。放下JUnit 4。

 类似资料:
  • 代码在没有流量控制的情况下变得有点无聊; 对于初学者来说,Parrot知道分支和标签。 分支op等同于Perl的goto: branch TERRY JOHN: print "fjords\n" branch END MICHAEL: print " pining" branch GRAHAM TERRY: print "It's"

  • 我试图测量分支预测成本,我创建了一个小程序。 它在堆栈上创建一个小缓冲区,用随机的0/1填充。我可以用< code>N来设置缓冲区的大小。代码重复导致同一个< code>1的分支 现在,我预计,如果

  • 问题内容: 假设我们有一个代码块,我们要执行70%的时间,又要执行30%的时间。 很简单。但是,如果我们希望它可以轻松扩展为30%/ 60%/ 10%等呢?在这里,这将需要添加和更改所有if语句,这些if语句使用起来并不十分好,而且很慢并且容易引发错误。 到目前为止,我发现大型开关对于此用例非常有用,例如: 可以很容易地将其更改为: 但是这些也有它们的缺点,它们麻烦并且被划分为预定数量的划分。 我

  • 第五部分 支持向量机(Support Vector Machines) 本章的讲义主要讲述的是 支持向量机(Support Vector Machine ,缩写为 SVM) 学习算法。SVM 算得上是现有的最好的现成的(“off-the-shelf”)监督学习算法之一,很多人实际上认为这里没有“之一”这两个字的必要,认为 SVM 就是最好的现成的监督学习算法。讲这个 SVM 的来龙去脉之前,我们需

  • 分支变换与组合变换恰好相反,它通常是由一个上游节点以特定的规则分离出不同的下游节点。下面是全部的分支变换形式。 switch-case-default switch-case-default 变换是通过给出的 block 将每个上游的值代入,求出唯一标识符,再分离这些标识符的一种操作。我们举例一个分离剧本的例子: EZRMutableNode<NSString *> *node = [EZRMut

  • 开发项目的时候,有了新的想法,但你又不太确定想法是否可行,或者你打算为项目开发一项新功能。都可以去创建一个新的分支,在上面去实践你的想法,如果可行,或者在新分支上完成了你想要的功能,你可以再把在这个分支上对项目做的修改合并到主分支或开发分支上。完成以后,可以保留这些分支,也可以把它们删除掉。 列出分支 git branch 创建分支 git branch 新分支 删除分支 git branch