2016-07-07 80 views
-2

我想創建的代碼的幾個街區的一些單元測試,但我不確定我應該是什麼樣的測試,單元測試是新的給我,我學會例子更好。這裏是有問題的代碼。諮詢測試

public static String buildAddressStreet(Address address) 
{ 
    if(address.getAddressLines().size() > 0) 
    { 
    return address.getAddressLines().get(0); 
    } 
    else 
    { 
    return StringUtils.EMPTY; 
    } 
} 

public static Collection<Payment> collectFraudPayments(WebOrder order) 
{ 
    return streamPaymentsFilterForFraud(order).collect(Collectors.toList()); 
} 

private static Stream<Payment> streamPaymentsFilterForFraud(WebOrder order) 
{ 
    return order.getPayments().stream() 
    .filter(i -> i.getPayMethod().isCreditCard()) 
    .filter(i -> (!StringUtils.startsWith(i.getFraudStatusCode(), "A") || FraudStatusCode.isPossibleFraud(i.getDecisionResponse()))); 
} 

public static String getAddressLocation(Address address, int location) 
{ 
    if(location < 3) 
    { 
    if(address.getAddressLines().size() >= location+1) 
    { 
     return address.getAddressLines().get(location); 
    } 
    } 

    return null; 
} 

public static String getCommerceCustomerNumber(WebOrder order) 
{ 
    Customer customer = findCustomer(order); 

    if(customer != null) 
    { 
    return customer.getId(); 
    } 
    else 
    { 
    return null; 
    } 
} 

public static String buildCustomerName(WebOrder order) 
{ 
    Optional<? extends Customer> foundCustomer = order.getItems().stream().findFirst().map(i -> i.getShipping()); 

    if(!foundCustomer.isPresent()) 
    { 
    foundCustomer = order.getPayments().stream().findFirst(); 
    } 

    return buildCustomerName(foundCustomer.orElse(null)); 
} 
public static String buildCustomerName(Customer customer) 
{ 
    StringBuilder sb = new StringBuilder(); 

    if(customer != null) 
    { 
    if(StringUtils.isNotBlank(customer.getAddress().getFirstName())) 
    { 
     sb.append(customer.getAddress().getFirstName()).append(' '); 
    } 
    if(StringUtils.isNotBlank(customer.getAddress().getMiddleName())) 
    { 
     sb.append(customer.getAddress().getMiddleName()).append(' '); 
    } 
    if(StringUtils.isNotBlank(customer.getAddress().getLastName())) 
    { 
     sb.append(customer.getAddress().getLastName()).append(' '); 
    } 
    if(StringUtils.isNotBlank(customer.getAddress().getCompanyName())) 
    { 
     sb.append(customer.getAddress().getCompanyName()).append(' '); 
    } 

    } 

    return sb.toString().trim(); 
} 

我理解,這是概率了很多,我不想爲我編寫的代碼只是一個想法或例子,說明如何進行測試。我已經寫過基本的測試,但其中一些讓我有點難過。由於

+0

二是從有關單位測試前幾天答案:http://stackoverflow.com/questions/38081611/junit-writing-a-test-for-a-method-that-deletes-an-entity/38082803#38082803和http://stackoverflow.com/questions/37947075/how-to-testmock-object-that-uses-external-api-jama-software/37948445#37948445 – Compass

回答

0

有一些規則,單元測試:

  1. 測試無 - 測試當輸入是沒有或零
  2. 測試一個 - 測試時輸入的是一個或一個長度,等等。
  3. 測試許多 - 測試當輸入大於一,或長於一個
  4. 測試第一 - 測試時,你輸入的第一件事是發生了什麼
  5. 測試最後 - 測試時,你輸入的是最後會發生什麼事情
  6. 測試的代碼的所有路徑 - 當你把所有這些if語句,測試所有的if語句的組合。

一個很好的方式來看看你的測試是如何有效的是使用代碼覆蓋率工具,看看有多少次,以及測試中哪些行被擊中。對於Java嘗試使用JaCoCo

+0

謝謝你,這是很多對我來說,得到這個寫上去。對此,我真的非常感激! – Norcal

0

一種更好的方式開始做單元測試是決定你想要你的代碼做的,然後寫測試,以確保它的那些東西是什麼,然後才編寫代碼。理想的單元測試將包含一個測試用例,涵蓋每行代碼,每個if語句和邊緣用例,以及Eli Sadoff提供的答案几乎涵蓋了這些情況。

+0

非常感謝你,我剛剛寫下了這段代碼。在學校,這是最好的做法先寫測試和代碼第二,但事實並非如此。 – Norcal