2017-08-05 148 views
0
public void login(String username, String password) { 

    for(int i = 0; i < Users.size(); i++) { 
     user users = (user) Users.get(i); 
     if(users.getUsername().contains(username) 
       && users.getPassword().contains(password)) { 
      userName = users.getUsername(); 
      userLevel = users.getUserLevel(); 
      isSuccess = true; 
     } 
    }  
} 

大家好。我正在尝试使用Java Junit为此方法执行Java单元测试。但我不知道该怎么做?因为有一个for循环。Java单元测试帮助循环

让我来解释一下这个方法。

for(int i=0;i<Users.size();i++){ 

此“用户”是一个向量。这个循环运行这个向量结束的单位。

user users = (user) Users.get(i); 

然后im调用用户类的用户实例。

if((users.getUsername().contains(username)) && 
    (users.getPassword().contains(password))) { 

然后,如果有任何用户与向量中的值匹配,则会给出输出。

谁能告诉我如何为此编写单元测试吗?

+1

'users.getPassword()包含(密码)'因此,如果我输入“e”作为密码,我可以进入任何帐户,其密码包含一个“e”很好:D – litelite

+0

一些建议:不要使用向量https://stackoverflow.com/questions/1386275/why -is-java-vector-class-considered-obsolete-or-deprecated此外,类应该是UpperCamelCase,所以'user'应该是b e用户。不要在同一范围内有一个名为userName的变量和一个名为username的参数。最后,请不要使用此代码的任何真实的,密码甚至用户名不会像这样工作。 – Novaterata

+0

你能澄清一下吗?如果你只是想在你成功找到用户信息的时候打印一条消息,比如'System.out.println(“User found!”);'',或者'isSuccess = true'后面的那个'' –

回答

2

您的代码很难阅读。了解Java coding standards

你的方法不应该打印任何东西。确定用户是否有效。在别处打印消息。

我假设你已经有了类用户,封装凭据:

package misc.user; 

import org.apache.commons.lang3.StringUtils; 

/** 
* Created by Michael 
* Creation date 8/5/2017. 
* @link https://stackoverflow.com/questions/45524768/java-unit-testing-help-for-loop 
*/ 
public class User { 

    private final String username; 
    private final String password; 

    public User(String username, String password) { 
     if (StringUtils.isBlank(username)) throw new IllegalArgumentException("username cannot be blank or null"); 
     if (StringUtils.isBlank(password)) throw new IllegalArgumentException("password cannot be blank or null"); 
     this.username = username; 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) { return true; } 
     if (o == null || getClass() != o.getClass()) { return false; } 

     User user = (User) o; 

     if (!getUsername().equals(user.getUsername())) { return false; } 
     return getPassword().equals(user.getPassword()); 
    } 

    @Override 
    public int hashCode() { 
     int result = getUsername().hashCode(); 
     result = 31 * result + getPassword().hashCode(); 
     return result; 
    } 

    @Override 
    public String toString() { 
     return "{\"User\":{" 
       + "\"username\":\"" + username + "\"" 
       + ",\"password\":\"" + password + "\"" 
       + "}}"; 
    } 
} 

我会用JUnit测试:

package misc.user; 

import org.junit.Assert; 
import org.junit.BeforeClass; 
import org.junit.Test; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Michael 
* Creation date 8/5/2017. 
* @link https://stackoverflow.com/questions/45524768/java-unit-testing-help-for-loop 
*/ 
public class UserTest { 

    private static List<User> users; 

    @BeforeClass 
    public static void setUp() { 
     users = new ArrayList<>(); 
     users.add(new User("FooBar", "myPassword")); 
     users.add(new User("GeorgeBush", "exPrez")); 
     users.add(new User("weatherBoy", "cloudy")); 
    } 

    @Test 
    public void testLogin_Success() { 
     // setup 
     String username = "weatherBoy"; 
     String password = "cloudy"; 
     // exercise 
     boolean isValidUser = users.contains(new User(username, password)); 
     // assert 
     Assert.assertTrue(isValidUser); 
    } 

    @Test 
    public void testLogin_Failure() { 
     // setup 
     String username = "noSuchUser"; 
     String password = "does not matter"; 
     // exercise 
     boolean isValidUser = users.contains(new User(username, password)); 
     // assert 
     Assert.assertFalse(isValidUser); 
    } 
}