Java-assertEquals&;assertTrue-测试失败,JUnit中出现异常[null],但在测试类中通过

Java-assertEquals&;assertTrue-测试失败,JUnit中出现异常[null],但在测试类中通过,java,exception,junit,null,assert,Java,Exception,Junit,Null,Assert,我有一个带有main方法的标准测试类和一个JUnit类,在通过测试驱动开发编写联系人目录时,我将使用它作为测试的基础。我需要使用assertEquals和assertTrue等方法。因为我以前从未使用过它们,所以我在标准测试类中编写了一个简单的测试,它们在预期时返回True,在预期时抛出异常 然后我进入我的JUnit测试类,编写在标准测试类中通过的相同测试并运行JUnit测试类。测试失败,出现以下错误: Test[Method Name] failed with exception [null]

我有一个带有main方法的标准测试类和一个JUnit类,在通过测试驱动开发编写联系人目录时,我将使用它作为测试的基础。我需要使用assertEquals和assertTrue等方法。因为我以前从未使用过它们,所以我在标准测试类中编写了一个简单的测试,它们在预期时返回True,在预期时抛出异常

然后我进入我的JUnit测试类,编写在标准测试类中通过的相同测试并运行JUnit测试类。测试失败,出现以下错误:

Test[Method Name] failed with exception [null]
我使用的确切代码如下所示:

assertEquals("NameImExpectingToFind",obj.searchMethod("nameImSearchingFor").get(0).getName());
我在这个问题上纠缠了好几个小时。它将通过标准测试类而不是JUnit测试类是毫无意义的

提前感谢您的帮助

Test class:
    AddressBook main = new AddressBook();
    Entry Will = new Entry("Will", "Blah",
            "Blah, blah, blah", "TF4 3HS", "077774451",
            "01/02/93");
    Entry Ben = new Entry("Ben", "Blah",
            "Blah, blah, blah", "TF4 3HS", "077774451",
            "01/02/93");
    main.addEntry(Will);
    main.addEntry(Ben);
    //assertEquals("Ben",main.cSearchFirst("Ben").get(0).getfName());
    System.out.println("Ben" == main.cSearchFirst("Ben").get(0).getfName());
返回True

JUnit Test class:
    AddressBook main = new AddressBook();
    Entry Will = new Entry("Will", "Blah",
            "Blah, blah, blah", "TF4 3HS", "077774451",
            "01/02/93");
    Entry Ben = new Entry("Ben", "Blah",
            "Blah, blah, blah", "TF4 3HS", "077774451",
            "01/02/93");
    main.addEntry(Will);
    main.addEntry(Ben);
    assertEquals("Ben",main.cSearchFirst("Ben").get(0).getfName());
    //System.out.println("Ben" == main.cSearchFirst("Ben").get(0).getfName());

返回测试[Method Name]失败,出现异常[null]。

在测试之前,您似乎得到了一个null指针

 List<Entry> entries = main.cSearchFirst("Ben");//check for null here, and size
 Entry e = entries.get(0); //again check null here, examine properties in debugger
 String s = e.getfName();
List entries=main.cSearchFirst(“Ben”)//检查此处是否为空,以及大小
条目e=条目。获取(0)//再次检查此处的null,检查调试器中的属性
字符串s=e.getfName();
在那里安装一个调试器,并仔细查看抛出null的位置


编辑:我还建议,如果您预期为null,则检查周围是否为null,否则请尝试/捕获null异常并使测试失败

您需要向我们展示更多的代码(两个类中的整个测试方法)。希望这会有所帮助。如果您不知道如何将main.cSearchFirst(“Ben”).get(0).getfName()作为单个表达式进行调试,请将其拆分为各个中间变量,以查看哪个级别为null。这里没有JUnit的具体内容。我只是添加了一些代码,如果这有助于你的怀疑的话?那是个意外。更新以反映真实代码。不过,谢谢你迄今为止的帮助。如果还有更多,我们将不胜感激!Ben“.equals(testStuff)在测试类中也返回True。我已经再次更新了代码,将其更改为main。所有“朋友”都应该读“main”。@user2962713好的,你尝试过我以前的更改吗?将“main.cSearchFirst(“Ben”).get(0).getfName()”分为不同的步骤,并遍历可能为null的地方?