Câu hỏi đặc biệt làm cho tham chiếu đến "thử nghiệm hộp trắng". Đây là nơi các bài kiểm tra của bạn có kiến thức sâu sắc về cấu trúc bên trong mã của bạn và khẳng định hành vi ở mỗi bước thay vì chỉ hiệu ứng đầu vào / đầu ra / phụ (kiểm tra hộp đen). Trong khi JUnit là tuyệt vời để làm cả hai, bạn cần thêm các khung bổ sung để làm điều này trong bối cảnh của một bài kiểm tra đơn vị.
EasyMock và JMock là những khuôn khổ tốt để làm điều này. Tôi có xu hướng ủng hộ JMock.
Có nguy cơ bắt đầu một cuộc tranh luận trong Cựu ước, bạn nên suy nghĩ cẩn thận về ý nghĩa của việc kiểm tra hộp trắng. Các kiểm tra hộp trắng được liên kết chặt chẽ với mã của bạn (rõ ràng) và nếu không được sử dụng cẩn thận, các khung mô phỏng có thể khiến các kiểm tra của bạn khá phức tạp, khó đọc và có xu hướng dễ vỡ hơn khi tái cấu trúc.
Tôi có xu hướng dính vào một hỗn hợp của cả hai. Kiểm tra hộp đen bất cứ khi nào có thể, và kiểm tra hộp trắng áp dụng một cách tiết kiệm cho mã rủi ro / phức tạp hơn.
Tất nhiên, các khung được liệt kê ở trên cũng có thể được sử dụng trong các thử nghiệm hộp đen trong đó số lượng các lớp đóng góp (được tiêm) lớn và việc khai thác đơn giản trở nên khó sử dụng.
Về TDD - chủ yếu là cách tiếp cận nâng cao thiết kế để viết mã, thay vì chỉ đơn giản là cách viết bài kiểm tra. Các thử nghiệm bạn có ở cuối là một đầu ra quan trọng, nhưng hơn nữa cách tiếp cận nhằm tăng cường thiết kế và cấu trúc ứng dụng của bạn.