2016-07-07 60 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