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 为该方法编写测试_Java_Unit Testing - Fatal编程技术网

Java 为该方法编写测试

Java 为该方法编写测试,java,unit-testing,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 voi

需要为以下方法编写一个测试

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

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

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

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

^[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;
      }

}
}
输出:


编号已与测试匹配,您要测试对该方法的调用:

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

您还需要确保覆盖所有逻辑路由。

使用参数化单元测试用例

@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);
}
你必须使用图书馆

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

那么编译器找不到方法isvalids您需要在测试类中实例化您测试的类。(参见我的答案示例)@BenjaminDale方法是静态的。我只想做一个静态导入是的,那最好。