Tôi có một cái gì đó như thế này:
public byte[] EncodeMyObject(MyObject obj)
Tôi đã từng thử nghiệm đơn vị như thế này:
byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF };
Assert.IsEqual(expectedResults, EncodeMyObject(myObject));
EDIT: Hai cách tôi đã thấy đề xuất là:
1) Sử dụng các giá trị dự kiến được mã hóa cứng, như ví dụ trên.
2) Sử dụng bộ giải mã để giải mã mảng byte được mã hóa và so sánh các đối tượng đầu vào / đầu ra.
Vấn đề tôi thấy với phương pháp 1 là nó rất dễ vỡ và đòi hỏi nhiều giá trị được mã hóa cứng.
Vấn đề với phương pháp 2 là việc kiểm tra bộ mã hóa phụ thuộc vào bộ giải mã hoạt động chính xác. Nếu bộ mã hóa / giải mã bị phá vỡ bằng nhau (ở cùng một vị trí), thì các thử nghiệm có thể tạo ra kết quả dương tính giả.
Đây rất có thể là những cách duy nhất để kiểm tra loại phương pháp này. Nếu đó là trường hợp tốt. Tôi đang đặt câu hỏi để xem liệu có chiến lược nào tốt hơn cho loại thử nghiệm này không. Tôi không thể tiết lộ nội bộ của bộ mã hóa cụ thể mà tôi đang làm việc. Tôi đang hỏi nói chung làm thế nào bạn sẽ giải quyết loại vấn đề này và tôi không cảm thấy nội bộ là quan trọng. Giả sử rằng một đối tượng đầu vào đã cho sẽ luôn tạo ra cùng một mảng byte đầu ra.
myObject
đi từmyObject
đến{ 0x01, 0x02, 0xFF }
? Thuật toán đó có thể được chia nhỏ và thử nghiệm không? Lý do tôi hỏi là hiện tại, có vẻ như bạn có một bài kiểm tra chứng minh rằng một điều ma thuật tạo ra một điều kỳ diệu khác. Sự tự tin duy nhất của bạn là một đầu vào tạo ra một đầu ra. Nếu bạn có thể phá vỡ thuật toán, bạn có thể tự tin hơn về thuật toán và ít phụ thuộc hơn vào đầu vào và đầu ra ma thuật.