首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TestNG expectedExceptions throws

TestNG expectedExceptions throws
EN

Stack Overflow用户
提问于 2015-04-08 06:44:07
回答 1查看 3K关注 0票数 1

我正在尝试测试以下课程:

代码语言:javascript
复制
package com.myclass;
public class MyClass {
    private Map<String, String> dataMap = new HashMap<>();

    public void extractInfoFromLine(String line) throws InvalidInputException {
        String[] words = line.split(" ");
        if (dataMap.containsKey(words[0])) {
            throw new InvalidInputException();
        }
        dataMap.put(words[0], words[2]);
    }
    public void confirmInfoPresent(String name) {
        // Do something
    }
}

使用此TestNG类:

代码语言:javascript
复制
package com.myclass;
public class MyClassTest {
    private MyClass myClass;

    @DataProvider(name = "invalid-data-provider")
    public Object[][] invalidDataProvider() {
        return new Object[][] { 
                { "A is B", "A"},
                { "A is D", "A"},
        };
    }

    @BeforeTest()
    public void setup() {
        myClass = new MyClass();
    }
    @Test(dataProvider = "invalid-data-provider", expectedExceptions = InvalidInputException.class)
    public void testExceptionalExtractValueForKey(String line, String name) throws InvalidInputException {
        myClass.extractInfoFromLine(line);
        myClass.confirmInfoPresent(name);
    }
}

为此,我定义了以下自定义异常:

代码语言:javascript
复制
package com.myclass;
public class InvalidInputException extends Exception {
    public InvalidInputException() {
        super();
    }

    public InvalidInputException(String message) {
        super(message);
    }

    public InvalidInputException(String message, Throwable cause) {
        super(message, cause);
    }

    public InvalidInputException(Throwable cause) {
        super(cause);
    }
}

然而,当我运行这个测试用例时,我会得到以下错误:

代码语言:javascript
复制
Expected exception com.myclass.InvalidInputException but got org.testng.TestException: 
Method MyClassTest.testExceptionalExtractValueForKey(java.lang.String, java.lang.String)[pri:0, instance:com.myclass.MyClassTest@3930015a] should have thrown an exception of class com.myclass.InvalidInputException

我尝试用标准异常替换我的自定义异常,结果仍然一样。

有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-10 13:18:55

@KarthickS,三个不同的人已经给了你同样的答案。我不明白还有什么要解释的,怎么解释的。在第一个@Test迭代中,dataMap是空的(dataMap.containsKey(words[0]) == false),所以"if“语句体中的代码不会被执行;这意味着您的异常不会被抛出。TestNg将威胁测试失败,因为您的@Test注释中设置了"expectedExceptions“属性。第二个测试迭代将通过,因为dataMap不再是空的(dataMap.put(words[0], words[2]) --您已经在第一次运行时添加了数据)。TestNg文档再一次提到了"expectedExceptions":预期测试方法会抛出的异常列表。如果没有引发此列表中的异常或与之不同的异常,则此测试将被标记为失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29507698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档