Junit Test bị lỗi null

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import connect.DBConnect;
import model.User;
@RunWith(PowerMockRunner.class)
@PrepareForTest({UserGet.class, DBConnect.class})
public class UserGetTest {

	UserGet userGet;
	UserGet userGetSpy;
@Before
	public void setUp() throws Exception {
		userGet = new UserGet();
		PowerMockito.mockStatic(DBConnect.class);
		userGetSpy = PowerMockito.spy(new UserGet());
	}
@Test
	public void testInsertUserWithValid() {
		User model = new User();
		model.setUserID(123);
		model.setUserName("test");
		model.setUserEmail("test@");
		model.setUserPass("123");
		model.setUserRole(false);
		model.setUserPhone("0905");
		userGet.insertUser(model);
	}
}

Mình bị lỗi null không biết có ai chỉ mình với.

Lỗi báo dòng nào? Bạn chỉ cho mình với!!!

2 Likes

code nó không báo lỗi mà khi chạy thì nó báo null và lỗi ở phần userGet.insertUser(model);
Có cần xem phần DAO ko

userGet bằng null tức là bạn chưa khởi tạo userGet.
Bạn xem lại code đầy đủ, xem đã setUp chưa?

3 Likes

setUp mình khởi tạo userGet rồi mà

Bạn chưa khởi tạo! Có chắc là phương thức setUp() được gọi trước testInsertUserWithValid() không?

2 Likes

bạn debug code function insertUser bằng debug xem có bị ko?

Mình debug rồi vẫn không bị lỗi gì

Bạn chụp ảnh lỗi lên xem

Dòng 61 ở tập tin UserGet.java trong phương thức insertUser().

2 Likes

đem bỏ đoạn code khởi tạo connection vào trong try catch rồi xem lỗi in ra là gì

2 Likes

Chưa tạo PowerMock cho PreparedStatement nhưng mình không biết code đoạn đó.

Giờ rõ nhé: không thể tạo kết nối nên connection = null.

2 Likes

bạn biết code tạo PowerMock cho connection ko

Tớ sẽ chỉ ra cho cậu 1 số vấn đề ở đây, cậu tham khảo nhé! :smiley:

  1. Trong Setup, cậu mới mock static instance cho DBConnect class, chưa có mock method getConnections. Đó là lý do cậu nhận được null cho hàm đó. Cậu có thể google cách làm, tớ nghĩ không khó lắm ha :smiley:
  2. Cậu cần mock cả Connection cho test này, vì cậu sẽ gặp vấn đề tượng tự với nó.
  3. Thường thì cậu chỉ test unit cho thành phần nào chứa logic thôi. Trong UserGet chỉ gọi tới DB để lấy dữ liệu, hoàn toàn không có business nghiệp vụ, nên tớ recommend cậu ko nên test unit ở đây.
    Dĩ nhiên, cậu có thể test kết nối tới DB, nhưng lúc đó, cậu thường nên dựng 1 in-memory DB, rồi kiểm tra việc insert dữ liệu có ổn ko, chứ không nên mock cả thế giới và expect ra kết quả hiển nhiên như cậu đang làm :smiley:

Tớ hi vọng nó sẽ giúp cậu giải quyết vấn đề của cậu.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?