В настоящее время я разрабатываю оболочку С# P/invoke для DLL, которая является частью моего продукта. У меня нет опыта работы с С#, и это первый значительный код С#, который я сделал. Я остро осознаю, что мне не хватает знаний о тонкости и идиомах языка.
Мой вопрос касается модульных тестов, которые я пишу, для которых я использую NUnit. Мне нужно сравнить значения переменных double[]
. Если я использую Assert.AreEqual(...)
для этого, то значения сравниваются для точного равенства. Тем не менее, я бы хотел сравнить с допуском. Существуют AreEqual()
перегрузки для скалярных реальных значений, которые допускают параметр delta
. Однако я не смог найти эквивалент для массивов. Я пропустил что-то очевидное?
В настоящий момент я решил проблему со следующим кодом:
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);
}
}
}
Пока это работает, я задаюсь вопросом, есть ли более чистые решения. В частности, я обеспокоен тем, что использование одного и того же имени для моего производного класса - это не только плохой стиль, но и может привести к непредвиденным проблемам в будущем.
Мне бы хотелось использовать методы расширения, но я понимаю, что они жизнеспособны только тогда, когда есть экземпляр класса под расширением. Конечно, я только называю статические методы в классе Assert
.
Мне жаль, если это кажется немного туманным, но мои инстинкты говорят мне, что я не делаю этого наилучшим образом, и я хотел бы знать, как сделать это правильно.