2009-03-03 34 views

Trả lời

15

Bạn viết các bài kiểm tra xác định hành vi của giao diện bên ngoài của lớp cấp cao nhất. Cho dù lớp đó sử dụng các lớp bên trong để thực hiện hành vi đó hay không, là một chi tiết thực hiện của lớp, và các bài kiểm tra không cần phải biết bất cứ điều gì về nó.

Nếu lớp nội bộ không thể được kiểm tra đầy đủ thông qua giao diện cấp cao nhất, thì tốt nhất nên di chuyển lớp nội bộ ra và kiểm tra trực tiếp lớp mới. Muốn kiểm tra các lớp bên trong là một mùi mã mà lớp bên trong có thể đủ quan trọng để trở thành một lớp cấp cao nhất.

1

Khi sử dụng MS Visual Studio cho bài kiểm tra đơn vị, bạn phải chỉ cần tạo một private Accessor. Nội bộ nó hoạt động với sự phản xạ tôi nghĩ. Chỉ cần nhìn vào mã được tạo ra.

2

Bạn không kiểm tra trực tiếp. Nó sẽ được kiểm tra thông qua lớp mà nó được xác định.

Và, nếu bạn áp dụng TDD, vì thẻ câu hỏi này hiện ngụ ý, kiểm tra bạn chỉ viết cuộc gọi đó cho lớp bên trong là gì? Tôi có nghĩa là nó không thể là một lớp học tiêu chuẩn, thuộc sở hữu tư nhân của lớp bạn đang làm việc?

1

Chúng tôi đã sử dụng lớp trợ giúp sử dụng phản chiếu để tải và gọi các phương thức trên lớp nội bộ. Nó cũng có thể thay đổi khả năng tiếp cận tại thời gian biên dịch bằng cách sử dụng biểu tượng DEBUG ví dụ

#if DEBUG 
public 
#else 
internal 
#endif 
    class MyInternalClass 
{ 
    ... 
} 

Tuy nhiên câu trả lời Esko Luontola là chính xác hơn vì nó là chức năng và doanh nghiệp yêu cầu đó là quan trọng nhất. Nó rất dễ dàng để quá tập trung vào phạm vi mã hơn là kiểm tra các khu vực nguy cơ quan trọng.

5

Không phải tôi muốn giới thiệu nó, nhưng bạn cũng có thể sử dụng InternalsVisibleToAttribute.

+0

bạn nói bạn sẽ không đề xuất điều này, nhưng bạn sẽ giải quyết điều gì đó như thế này? http://stackoverflow.com/questions/15440935/how-to-test-internal-class-library –

+0

@Thomas: chính xác như Esko nói trong câu trả lời của anh ấy. Bạn kiểm tra các API nội bộ gián tiếp thông qua giao diện công khai của mình hoặc bạn quảng bá các API nội bộ của mình cho công khai và kiểm tra chúng trực tiếp. –

Các vấn đề liên quan