Некоторые из моих модульных тестов я проваливаю примерно в 25% случаев за тест. Проблема в том, что когда я создаю объект «Entity», я использую функцию std :: make_shared для создания указателя на другой объект. Кажется, что иногда указатели в отдельных объектах Entity указывают на один и тот же объект преобразования. Я не уверен, как это возможно. Вот соответствующий код:
Конструктор сущности:
Entity::Entity(std::shared_ptr<Shape> i_shape) :
shape {i_shape}
{
transform = std::make_shared<Transform> (Vector2f(0.0f, 0.0f), Vector2f(1.0f, 1.0f), 0.0f);
}
Код модульного теста Visual Studio 2017, выявляющий проблему:
TEST_METHOD(CircleCollisionTest2)
{
Entity* testCircleEnt1;
Entity* testCircleEnt2;
std::shared_ptr<Circle> testCircle1 = std::make_shared<Circle>(60.0f);
std::shared_ptr<Circle> testCircle2 = std::make_shared<Circle>(60.0f);
testCircleEnt1 = &Entity(testCircle1);
testCircleEnt2 = &Entity(testCircle2);
testCircleEnt1->GetTransform()->SetPostion(Vector2f(0, 0));
testCircleEnt2->GetTransform()->SetPostion(Vector2f(200, 0));
Assert::IsFalse(Physics::TestCollision(testCircleEnt1, testCircleEnt2));
}
Когда я создаю экземпляры своих объектов сущности, make_shared создает указатели на те же объекты Transform. Я подтвердил, что они содержат один и тот же адрес в режиме отладки, поэтому он не должен включать мои методы получения или установки или что-то подобное.
Кроме того, всякий раз, когда это происходит, завершение теста проходит ~ 150 мс, а не ~ 5 мс. Как это может происходить примерно в 25% случаев, а не в 100% или 0%? Я подумал, что это может быть связано со средой тестирования Visual Studio, но я воспроизвел эти результаты в специальном тесте.
Любая помощь будет приветствоваться. Спасибо!