为该方法编写测试

时间:2014-01-20 12:27:26

标签: java unit-testing

需要为以下方法编写测试

public static boolean isValidSsn(String aSsn) { //ssn = social security number
  if (aSsn.matches("\\d{3}-\\d{2}-\\d{4}")) {   // Match found
  return true;
} 

// Not a valid number
return false;
}

我试过了,我知道这是非常错误的,但不知道如何纠正它。

public void testIsValidSsn() {
  String actual = "\\d{3}-\\d{2}-\\d{4}";
  String exp = "123-45-6789";
  assertEquals(actual, exp);
}

4 个答案:

答案 0 :(得分:4)

预期是方法的预期返回值,而实际是它实际返回的值。调用方法并将其存储在“实际”中并与您的预期进行比较。

public void testIsValidSsn() {
  boolean actual = isValidSsn("123-45-6789");
  boolean exp = true;
  assertEquals(exp, actual);
}

答案 1 :(得分:2)

使用参数化单元测试用例

@Test
@Parameters({"123-345-23,false","123-123-213-123,true"})
public void testIsValidSSN(String ssnValue, boolean expectedResult){
     boolean result = isValidSSN(ssnValue);
     assertEquals("Expected result did not match for SSN:" + ssnValue, expectedResult,result);
}

您必须使用JUnitParams

优点

  • 测试方法的可重用性。这称为数据驱动单元测试。
  • 它解决了JUnit无法将参数作为参数传递给方法
  • 的限制
  • 轻松添加新案例,为您提供可维护性和可读性

答案 2 :(得分:1)

为您的特定序列试用此正则表达式

^[0-9]{3}\-[0-9]{2}\-[0-9]{4}$

这绝对有助于你。

public class Sample 
{

        public static void main(String ar[])
{
      String aNumber= "254-58-3698";
       isValidNumber(aNumber);

}

public static Boolean isValidNumber(String aNumber)
{


      String pattern = "^[0-9]{3}\\-[0-9]{2}\\-[0-9]{4}$";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Number has Matched");  
return true;       
      } else {
         System.out.println("NO MATCH");
return false;
      }

}
}

输出:

号码已匹配

答案 3 :(得分:1)

通过测试,您想测试对方法的调用:

public void shouldReturnTrueIfValidSSN() {
       // Given
       YourClass yourClass = new YourClass();   

       // When
       boolean result = yourClass.isValidSsn("123-456-789");

       // Then
       assertEquals(result, true);
}

public void shouldReturnFalseIfInvalidSSN() {
       // Given
       YourClass yourClass = new YourClass();   

       // When
       boolean result = yourClass.isValidSsn("yolo");

       // Then
       assertEquals(result, false);
}

您还需要确保涵盖所有逻辑路线。