-
Notifications
You must be signed in to change notification settings - Fork 307
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Савенко Дмитрий #258
base: master
Are you sure you want to change the base?
Савенко Дмитрий #258
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Круто, что сразу разделил на два отдельных проекта - рабочая практика, чтобы тесты собирались и гонялись отдельно от сборки основного кода проекта
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Название файлика не совпадает с названием класса внутри
} | ||
|
||
var rectangles = layouter.GetRectangles(); | ||
rectangles.Count.Should().Be(100); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Эта проверка тянет на отдельный тест, ведь текущий, судя по названию, должен проверять лишь круговое расположение, но не то, что все переданные прямоугольники смогли расположиться
} | ||
|
||
[Test] | ||
public void GenerateLayout_ShouldCreateCircularCloud() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А нужен ли тест выше, если текущий почти полностью повторяет его работу за исключением размеров прямоугольников?
private double GetDistanceFromCenter(Point point) | ||
{ | ||
var dx = point.X - center.X; | ||
var dy = point.Y - center.Y; | ||
return Math.Sqrt(dx * dx + dy * dy); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Один и тот же метод дублируется дважды, тянет на вынесение в экстеншн
using System.IO; | ||
using TagsCloudVisualization; | ||
|
||
public class CircularCloudLayouter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кажется, что в этом классе смешались две ответственности - он и располагает прямоугольники, и умеет с файловой системой работать. Давай оставим один лейаутер и отдельную зависимость, которая будет уметь сохранять файл
namespace TagsCloudVisualizationTest; | ||
|
||
[TestFixture] | ||
public class RectangleLayouterTests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай ещё напишем а-ля нагрузочный тест, вставим оооочень много прямоугольников и проверим, что тест отработает за адекватное время
[TestFixture] | ||
public class LayoutGeneratorTests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Только после ревью основного проекта понял, что тесты на этот класс особо и не были нужны, ведь он просто вызывает классы и методы, которые ты уже тестируешь в соседних тест-классах, то есть не имеет собственной бизнес-логики
Но раз уж они есть, то пусть остаются))
|
||
public Rectangle ShiftRectangleToCenter(Rectangle rectangle, List<Rectangle> rectangles) | ||
{ | ||
if (rectangles.Any(r => r.IntersectsWith(rectangle))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Перед вызовом метода ShiftRectangleToCenter
ты в цикле генерировал точки, пока не добрался до возможности вставить прямоугольник без пересечения с другими прямоугольниками. То есть к моменту вызова текущего метода мы точно уверены, что прямоугольник ни с чем уже не пересекается и ветка внутри if
точно не будет выполнена. Так что, если у тебя нет планов на этот код, можешь его смело грохать))
if (rectangles.Any(r => r.IntersectsWith(nextRectangle))) | ||
break; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
На каждой итерации цикла сдвига ближе к центру эта проверка затрачивает серьезные ресурсы. Конечно, можно сейчас подзапариться за оптимизацию, но хочется делать это только после того как будет уверенность, что этот метод вообще нужен
Ты проверял, он правда более плотное облако генерирует? Может быть даже без шифтера получалось достаточно плотное облако?
Если проверял, давай обсудим на двух конкретных примерах - расположение облака с большим количеством прямоугольников с шифтером и без
@desolver