Giả sử tôi đã viết một phương thức mở rộng trong C # cho byte
các mảng mã hóa chúng thành các chuỗi hex, như sau:
public static class Extensions
{
public static string ToHex(this byte[] binary)
{
const string chars = "0123456789abcdef";
var resultBuilder = new StringBuilder();
foreach(var b in binary)
{
resultBuilder.Append(chars[(b >> 4) & 0xf]).Append(chars[b & 0xf]);
}
return resultBuilder.ToString();
}
}
Tôi có thể kiểm tra phương pháp trên bằng NUnit như sau:
[Test]
public void TestToHex_Works()
{
var bytes = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
Assert.AreEqual("0123456789abcdef", bytes.ToHex());
}
Nếu tôi sử dụng Extensions.ToHex
bên trong dự án của mình, hãy giả sử theo Foo.Do
phương pháp như sau:
public class Foo
{
public bool Do(byte[] payload)
{
var data = "ES=" + payload.ToHex() + "ff";
// ...
return data.Length > 5;
}
// ...
}
Sau đó, tất cả các bài kiểm tra Foo.Do
sẽ phụ thuộc vào sự thành công của TestToHex_Works
.
Sử dụng các hàm miễn phí trong C ++ , kết quả sẽ giống nhau: các thử nghiệm mà các phương thức kiểm tra sử dụng các hàm miễn phí sẽ phụ thuộc vào sự thành công của các thử nghiệm chức năng miễn phí.
Làm thế nào tôi có thể xử lý các tình huống như vậy? Tôi có thể bằng cách nào đó giải quyết các phụ thuộc kiểm tra? Có cách nào tốt hơn để kiểm tra các đoạn mã ở trên không?
toHex
(hoặc thực hiện trao đổi). Ngoài ra mọi thứ đều ổn. Mã của bạn chuyển đổi thành hex đã được kiểm tra, giờ đây có một mã khác sử dụng mã được kiểm tra đó làm tiện ích để đạt được mục tiêu của riêng mình.
Then all tests of Foo.Do will depend on the success of TestToHex_works
-- Vì thế? Bạn không có các lớp học phụ thuộc vào sự thành công của các lớp khác?