首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在setUp()中以JUnit初始化对象数组

在setUp()中以JUnit初始化对象数组
EN

Stack Overflow用户
提问于 2018-04-25 15:03:57
回答 4查看 1.2K关注 0票数 2

我试图使用setUp为我的测试方法初始化JUnit中的对象数组,但是当测试抛出错误(空指针异常)时,我做了一些错误。当我在测试方法中初始化数组时,它们运行得很好,但这显然并不理想。有人能指出我在这里做错了什么吗?

代码语言:javascript
复制
class MainTest {

    Lord baratheons[];
    Lord starks[];

    //Setup & Teardown

    @Before
    static void setUp() throws Exception {
        Lord baratheons[] = new Lord[3];
        baratheons[0] = new Lord("Robert", 15);
        baratheons[1] = new Lord("Renly", -5);
        baratheons[2] = new Lord("Stannis", 30);
        System.out.println("Baratheons initialised!");

        Lord starks[] = new Lord[3];
        starks[0] = new Lord("Robb", -60);
        starks[1] = new Lord("Eddard", 0);
        starks[2] = new Lord("Jon", 90);
        System.out.println("Starks initialised!");
    }

    //Tests

    @Test
    void testGratefulLord() {
//      Lord baratheons[] = new Lord[3];
//      baratheons[0] = new Lord("Robert", 15);

        int x = baratheons[0].getRelationship();
        baratheons[0].giveFief();
        assertEquals(baratheons[0].getRelationship(), (x+=10));

    }

编辑:

注:除了遵循以下解决方案中概述的步骤之外,我还想为后人指出,我在设置时也使用了错误的标记。由于这是JUnit 5,标记为@BeforeEach。前面是JUnit 4的标记,这就是为什么没有调用安装方法的原因。我希望这对未来的用户有帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-25 15:21:09

这里的问题是在setUp()方法中重新声明数组。这会干扰您想要使用的对象的范围。

staticsetUp()方法中删除,因为这是不需要的。

将代码更改为

代码语言:javascript
复制
Lord baratheons[] = new Lord[3];
Lord starks[] = new Lord[3];

代码语言:javascript
复制
baratheons = new Lord[3];
starks = new Lord[3];

最后,您需要将您的方法更改为public。为什么?因为JUnit在幕后使用反射,它们需要公开才能识别。您可以查看JUnit JavaDoc并看到它显式地提到了public void方法。

票数 3
EN

Stack Overflow用户

发布于 2018-04-25 15:17:48

static方法中删除setUp

也是

代码语言:javascript
复制
Lord baratheons[] = new Lord[3];

应该只是

代码语言:javascript
复制
baratheons = new Lord[3];

starks也是如此。

票数 1
EN

Stack Overflow用户

发布于 2018-04-25 15:22:48

setUp()不应该是静态的。

在setUp()方法中实例化的数组分配给局部变量。

代码语言:javascript
复制
Lord baratheons[] = new Lord[3];

您在这里声明的变量正在隐藏类属性。您应该移除这里的类(Lord),以便将新数组分配给好变量。

代码语言:javascript
复制
baratheons = new Lord[3];

也要小心您的断言声明:

代码语言:javascript
复制
assertEquals(baratheons[0].getRelationship(), (x+=10));

这个语句是有效的,但是在这里使用'+=‘语法可能会导致错误。在这种情况下,代码非常简单,但是如果您想要更改x的值,那么提取语句'x+=10‘就会变得清晰起来。如果不需要更改值,则可以使用x+10。

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

https://stackoverflow.com/questions/50025583

复制
相关文章

相似问题

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