Junit测试函数返回一个字符串

时间:2017-07-25 21:26:53

标签: java unit-testing testing 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
  }

我无法理解如何测试这个,所有其他示例都是特定于它们的功能。我只是想让函数返回一个已清理的字符串?我怎么能这样做呢?

2 个答案:

答案 0 :(得分:2)

你要测试,首先你必须准备要测试的数据,输入值,期望值=>呼叫测试功能,输入值=>通过test =>下的函数获得实际值返回值用实际值断言期望值。这是您可以使用的list of assert function

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);
  }
}

答案 1 :(得分:2)

为了记录,更多"现实世界"测试看起来像:

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()hamcrest匹配器 - 因为生成的代码更易于阅读和理解。

然后你继续添加更多的测试用例。退后一步,你就会想到要在这里测试的事情。你想确保" e"留下" e",那" E"变成" e" ......等等。

其他事情:

  • 特别是在进行此类输入/输出测试时 - 在测试方法中使用字段/常量。您希望您的测试尽可能自包含。为了理解我的测试 - 你只需要查看方法体。您的方法要求您查找这些常量实际包含的内容!
  • 准确地说:完全没有必要让在您的测试方法上抛出异常。它不会抛出 - 所以签名不应该宣布!
  • 错误在您的生产代码中命名。您的方法不会变成小写。它还取代了内容。方法名称应该表达。截至目前,该方法名称误导性。这是你的代码可以做的最糟糕的事情:误导读者相信代码的作用,而不是做更多/其他事情!