Tôi hiện đang phát triển trình bao bọc C# P/gọi hàm DLL là một phần của sản phẩm của tôi. Tôi không có kinh nghiệm với C# và đây là lần đầu tiên C# mã hóa tôi đã thực hiện. Tôi nhận thức sâu sắc rằng tôi thiếu kiến thức về những điểm tốt hơn và thành ngữ của ngôn ngữ.Làm cách nào để mở rộng lớp NUnit Assert bằng cách thêm một quá tải tĩnh mới cho AreEqual?
Câu hỏi của tôi liên quan đến các bài kiểm tra đơn vị mà tôi đang viết mà tôi đang sử dụng NUnit. Tôi cần phải so sánh các giá trị của các biến số double[]
. Nếu tôi sử dụng Assert.AreEqual(...)
để làm điều này thì các giá trị được so sánh với sự bình đẳng chính xác. Tuy nhiên, tôi muốn so sánh với sự khoan dung. Có quá tải AreEqual()
cho các giá trị thực vô hướng thừa nhận thông số delta
. Tuy nhiên, tôi đã không thể tìm thấy một tương đương cho mảng. Tôi đã bỏ lỡ một cái gì đó hiển nhiên?
Tại thời điểm này tôi đã giải quyết được vấn đề với đoạn mã sau:
class Assert : NUnit.Framework.Assert
{
public static void AreEqual(double[] expected, double[] actual, double delta)
{
AreEqual(expected.Length, actual.Length);
for (int i = 0; i < expected.Length; i++)
{
AreEqual(expected[i], actual[i], delta);
}
}
}
Trong khi điều này dường như làm việc Tôi tự hỏi nếu có một giải pháp sạch hơn có sẵn. Đặc biệt, tôi lo ngại rằng việc sử dụng cùng tên cho lớp dẫn xuất của tôi là, không chỉ phong cách nghèo nàn, mà còn có thể dẫn đến những vấn đề không lường trước được trên đường.
Tôi muốn sử dụng các phương pháp mở rộng nhưng tôi hiểu rằng chúng chỉ khả thi khi có trường hợp của lớp đang được gia hạn. Tất nhiên, tôi chỉ gọi phương thức tĩnh trên lớp Assert
.
Tôi xin lỗi nếu điều này có vẻ hơi mơ hồ, nhưng bản năng của tôi nói với tôi rằng tôi không làm điều này một cách tốt nhất và tôi muốn biết cách làm đúng.
Bạn đã thử [Phương pháp Extension] (http://msdn.microsoft.com/en-us/library/bb383977.aspx)? –
@Ofer Zelig trong khi tôi đã cho bạn +1 tôi nhớ rằng Phương thức mở rộng, trong khi được xác định tĩnh, chỉ hoạt động trên các phiên bản. – dowhilefor
Vì vậy, như nó có vẻ bây giờ, mà không thể được thực hiện (trừ khi bạn đang thực hiện lớp wrapper, rất nhiều công việc khó khăn và xấu xí). Xem [this] (http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class/435617#435617) và [this] (http: // madprops.org/blog/static-extension-methods/). –