У меня есть функция для лучевого вещания на сетке с алгоритмом Брезенхэма.Я хочу оптимизировать для конкретных случаев, когда линия ортогональна или диагональна;конечно, эта логика не будет возвращена / выставлена пользователю.
Можно ли обнаружить крайний случай оптимизации через модульное тестирование?Например, при вызове функции ищите определенный маркер Debug.WriteLine
.
Я новичок в модульном тестировании, и, возможно, мне не хватает точки (тестирование функциональности предоставляется пользователю), но я утверждаю, что мои пограничные случаи работают какОжидаемый может быть неоценимым - особенно при активной разработке оптимизаций.
Пример того, чего я хочу достичь:
public IEnumerable<Coordinate> RayCast (Coordinate source, Coordinate direction) {
if (direction.X == 0 || direction.Y == 0) {
Debug.WriteLine ("Orthogonal_Edge_Case");
//Simple iteration across 1 axis
...
yield break;
}
if (Math.Abs(direction.X) == Math.Abs(direction.Y)) {
Debug.WriteLine ("Diagonal_Edge_Case");
//Simple diagonal iteration
...
yield break;
}
//Standard Bresenham's algorithm
...
yield break;
}
...
[TestMethod]
public void TestRayCast () {
var source = new Coordinate (0,0);
var orthogonal = new Coordinate (0,1);
CoordinateUtil.RayCast (source, orthogonal);
//Check that the Orthogonal_Edge_Case marker was emitted
var diagonal = new Coordinate (1,1);
CoordinateUtil.RayCast (source, diagonal);
//Check that the Diagonal_Edge_Case marker was emitted
//Usual tests for RayCast
...
}
Примечание: IЯ использую тестовый набор Visual Studio 2019, но мне любопытно, возможно ли это с помощью любого инструмента .NET