固原网站建设,正规挣钱最快的app,小广告发布,无需域名网站建设命名测试 在创建Junit测试时#xff0c;通常没有实际使用该方法的名称。 Junit运行程序使用反射来发现测试方法#xff0c;并且从版本4开始#xff0c;您不再被限制以test开始方法的名称。 测试方法的名称用于文档目的。 人们遵循不同的风格。 您可以使用给定的given_Somet… 命名测试 在创建Junit测试时通常没有实际使用该方法的名称。 Junit运行程序使用反射来发现测试方法并且从版本4开始您不再被限制以test开始方法的名称。 测试方法的名称用于文档目的。 人们遵循不同的风格。 您可以使用给定的given_Something_when_Something_then_Something样式命名测试我也遵循了一段时间。 其他学校开始了与世界的方法的名称should来描述被测对象“应该”做的。 我真的不明白为什么这比用test开头方法的名称要好得多。 如果所有方法都以相同的前缀开头那么这仅仅是噪声。 这些天来我倾向于将这些方法命名为关于SUT功能的简单陈述。 如何访问测试名称 从技术上讲只要名称是唯一的您就可以自由命名方法。 测试中通常不使用该名称并且测试结果不应取决于测试方法的实际名称。 即使Junit支持一种访问方法名称的方法。 如果您有Junit规则 Rule
public TestName name new TestName(); 您可以在测试中引用对象name 获取实际方法的名称为 String testName name.getMethodName();我们可以用它做什么 有时被测单元会创建一些巨大的结构可以序列化为二进制或文本文件。 通常的做法是运行一次测试检查结果文件如果可以则将其保存以供以后比较。 以后的测试执行将实际结果与开发人员保存并检查的结果进行比较。 在集成测试的情况下如果对外部系统进行打桩并且可以从某些本地测试数据文件中获取其响应而不用查询外部服务则可以使用类似的方案。 在这种情况下可以使用测试名称来创建存储测试数据的文件名。 测试的名称是唯一的可以轻松地将数据与需要它的测试配对。 我在jscglib库中使用了这种方法。 该库提供了流利的API来创建Java源代码。 测试包含一些Java Builder模式导向器代码然后将生成的源代码保存到文件中或与已存储的结果进行比较。 要保存文件使用了aux方法getTargetFileName private String getTargetFileName() {String testName name.getMethodName();String fileName target/resources/ testName .java;return fileName;} 要获取资源名称使用了getResourceName方法 private String getResourceName() {String testName name.getMethodName();return testName .java;} 之后加载和保存生成的Java代码变得轻而易举 private void saveGeneratedProgram(String actual) throws IOException {File file new File(getTargetFileName());file.getParentFile().mkdirs();FileOutputStream fos new FileOutputStream(file);byte[] buf actual.getBytes(utf-8);fos.write(buf, 0, buf.length);fos.close();}private String loadJavaSource() {try {String fileName getResourceName();InputStream is this.getClass().getResourceAsStream(fileName);byte[] buf new byte[3000];int len is.read(buf);is.close();return new String(buf, 0, len, utf-8);} catch (Exception ie) {return null;}} 通常这是我知道的唯一示例您可以将测试方法的名称用于除文档之外的其他名称。 您不应该使用的名称 用我的语言说“每个人都擅长某事。 至少表明失败。” 下面的示例演示了这种失败。 我已经看到了将测试数据编码为测试方法名称的代码。 访问测试方法名称的方式也很奇怪。 程序员可能不知道有一种支持方法的方法。 缺乏知识可能阻止了他或她行恶但这个人是个天才。 测试的测试方法是调用帮助程序类的静态方法。 该静态方法引发异常它也捕获了该异常并查看了堆栈跟踪以识别调用方方法的名称。 在访问了该名称之后该代码应用了正则表达式以从方法名称中提取值。 摘要 我不知道Junit开发人员打算给我们类TestName 。 可能有一些用例需要该功能。 我确信他们没有提供功能因为有可能这样做。 如果您不知道所提供的API有什么用处则可能不应该仅仅因为可以就提供它。 新手程序员会错误地使用它而不是好的。 另一方面如果您在API中看到可以使用的内容则并不意味着您应该使用该功能。 您应该更好地了解功能的目的并相应地使用它。 编写单元测试比命名它们更重要。 只要没有单元测试关于单元测试的命名的辩论就没有用。 根据需要编写单元测试但不能更多。 翻译自: https://www.javacodegeeks.com/2015/05/using-junit-test-name.html