Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回字符串的Junit测试函数_Java_Unit Testing_Testing_Junit - Fatal编程技术网

Java 返回字符串的Junit测试函数

Java 返回字符串的Junit测试函数,java,unit-testing,testing,junit,Java,Unit Testing,Testing,Junit,我在类中有一个函数: public String covertToLowerCase(String sliceName) { sliceName = sliceName.trim().toLowerCase(); sliceName = sliceName.replaceAll("\\.txt$|\\.dat$", ""); return sliceName; } 我想用Junit测试一下。我创建了一个单独的测试文件,该文件包含以下内容:

我在类中有一个函数:

public String covertToLowerCase(String sliceName) {
        sliceName = sliceName.trim().toLowerCase();
        sliceName = sliceName.replaceAll("\\.txt$|\\.dat$", "");
        return sliceName;
    }
我想用Junit测试一下。我创建了一个单独的测试文件,该文件包含以下内容:

  public class MyControllerTest {

  private MyController myController;
  private static final String SLICE_NAME = "Hello World";

  @Test
  public void shouldReturnSanitizedString() throws Exception {
  String expected = myController.covertToLowerCase(SLICE_NAME);
  // assert that actual and expected are same
  }

我无法理解如何测试这一点,所有其他示例都是特定于其功能的。我只想让函数返回一个经过消毒的字符串?我该怎么做呢?

如果要测试,首先必须准备要测试的数据,输入值,期望值=>使用输入值调用测试函数=>获取测试函数返回的实际值=>使用实际值断言期望值。这是一个你可以使用的方法

public class MyControllerTest {

  private MyController myController;
  private final String SLICE_NAME = "Hello World";
  private final String expected = "hello world";

  @Test
  public void shouldReturnSanitizedString() throws Exception {
  String actual = myController.covertToLowerCase(SLICE_NAME);
  // assert that actual and expected are same
  assertEquals(expected, actual);
  }
}
记录在案的是,更多的“真实世界”测试更像是:

public class MyControllerTest {
  private MyController underTest = new MyController();

  @Test(expected=NullPointerException.class)
  public void testConvertToLowerCaseWithNull() {
    underTest.convertToLowerCase(null);
  } 
上面只是一个例子——例如,您的方法可以决定抛出IllegalArgumentException。您需要确保您的生产代码确实为无效情况引发异常

  @Test
  public void testConvertToLowerCaseWithEmptyInput() {
    assertThat(underTest.convertToLowerCase(""), is(""));
  } 
我建议将
assertThat()
与匹配器一起使用,因为生成的代码更易于阅读和理解

然后继续添加更多的测试用例。退后一步,你会提前考虑要测试的东西。你要确保“e”保持“e”,使“e”变成“e”。。。等等

其他事项如下:

  • 尤其是在进行此类仅输入/输出测试时——不要在测试方法中使用字段/常量。您希望您的测试尽可能独立。为了理解我的测试,您只需要查看方法体。您的方法要求您查找这些常量实际包含的内容
  • 准确一点:绝对没有必要在您的测试方法上抛出异常。它不会抛出-所以签名不应该宣布这一点
  • 生产代码中的命名错误。你的方法不仅会变成小写。它还取代了内容。方法名称应该表示该名称。到目前为止,该方法名称具有误导性。这是你的代码所能做的最糟糕的事情:误导读者相信代码所做的事情,而是做更多的事情
什么是“消毒”,正则表达式似乎只是从字符串中删除txt或dat扩展名。无论如何,您应该有smth,比如
String expected=“hello world”用于测试,然后
字符串实际值=myController.covertToLowerCase(SLICE\u NAME)然后
资产质量(预期、实际)
。然后你想用同样的方法在其他不同的输入上测试它,比如:“test.txt”、“test.dat”、“test.doc”、“我不明白”。为什么要将返回值赋给名为
预期的
变量?这应该是实际的
expected
是您实际期望它返回的值。myController字段在测试中初始化在哪里?如果函数/方法是静态的,则可以在不初始化的情况下使用和测试它。如果要测试其他函数:public String createSqlFromSchema(List-mapSchemas){String template=“%s%s”;List-colList=mapSchemas.stream().map(m->String.format(template,m.getColName(),m.getDataType())。collect(Collectors.toList());返回String.join(“\n”,colList);}。作为测试函数中的参数,我必须提供什么?当我记录当前参数时,它显示的是引用,而不是实际值。@TeeJay当你有新问题时,问一个新问题。不要进入“评论中的更多问题”乒乓球。此外:你认为有人想阅读注释中的源代码吗?@TeeJay请注意@GhostCat的注释。最重要的是,在使用它之前,你需要了解它。对于你的问题,你需要测试函数
createSqlFromSchema(列出映射模式)
此函数的输入必须是一个
列表
,让我们初始化列表并传递到测试函数。此外,您希望获取列表的值,然后逐个查看以获取值。