2017-08-05 85 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); 
    } 
}