您的问题对我来说似乎是两个问题。一方面,您想比较两个测试框架,另一方面,您想轻松地实现测试,拥有自然的断言等。
好的,首先,JUnit在功能方面一直在赶上TestNG,他们在v4方面弥补了差距,但我认为还不够好。注释和数据提供程序之类的东西在TestNG中仍然要好得多。此外,由于TestNG具有测试依赖性,分组和排序,因此它们在测试执行方面更加灵活。
JUnit仍然需要某些before / after方法是静态的,这限制了您在运行测试之前可以执行的操作,而TestNG从来没有这个问题。
TBH,大多数情况下,这两个框架之间的差异并不大,除非您专注于集成/自动化测试。根据我的经验,JUnit是从头开始为单元测试而构建的,现在正朝着更高水平的测试方向发展,这使IMO成为执行该任务的错误工具。TestNG在单元测试中表现出色,并且由于其强大的数据提供能力和强大的测试执行能力,因此在集成/自动化测试级别上表现更好。
现在,对于我认为是一个单独的问题,如何编写结构良好,可读性和可维护性的测试。我敢肯定,其中大多数都知道,但是诸如Factory Pattern,Command Pattern和PageObjects(如果是测试网站)之类的东西至关重要,在您的测试(SUT)和实际测试之间建立一层抽象非常重要。是(业务逻辑断言)。为了拥有更好的断言,可以使用Hamcrest。利用javas继承/接口来减少重复并强制通用性。
几乎忘记了,还使用了Test Data Builder Pattern,这与TestNG的dataprovider注释一起非常有用。