написать модульный тест для кода, который использует указатель - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь провести тестирование в уже разработанном приложении, которое поддерживает наша группа.это больше всего в c #, хотя он использует некоторые библиотеки c ++, а часть управления памятью была разработана «вручную».Пожалуйста, не говорите мне о том, как сделать управление памятью в C # ... этот код написан, и он работает, я просто пытаюсь писать тесты.SUT - это .NET Standard 2.0, мой тестовый класс (на данный момент) - .NET Framework 4.6.2, но, думаю, я мог бы это изменить.РЕДАКТИРОВАТЬ: проект определенно имеет флажок «Разрешить небезопасный код», как для тестового проекта, так и для SUT.

В любом случае, у SUT есть метод расширения и свойство, которое мне нужно использовать.один из них:

SUT.SourcePtr, который обеспечивает void* возврат, другой - SUT.CopyFrom(void*), я думаю, вы можете видеть, куда это идет.Во-первых, я просто хотел, чтобы мой тест подтвердил, что я могу выполнить что-то вроде следующего, предполагая, что оба объекта правильно созданы:

sut1.CopyFrom(sut2.SourcePtr); По понятным причинам мне нужно, чтобы оно было:

unsafe
{
    sut1.CopyFrom(sut2.SourcePtr);
}

Но когда эти строки находятся в [TestMethod], тестовый проводник не будет запускать тест.Он не говорит, что пропущен, он просто не запускается.Результаты теста показывают:

[10.12.2008 12:19:51 PM Informational] Выполнение метода теста '..' [10.12.2008 12:19:51 PM Informational] ----- Выполнение теста началось ------ [10.10.2008 12:19:57 Информационный] ========== Выполнить тест завершено: 0 прогон (0: 00: 05.5860315)==========

НО ... Если я сделаю отдельный тест, объявленный как public unsafe void LoadSutUnsafe(), он будет работать нормально (первый пример - [DataTestMethod] (но когда я изменяюатрибут на моем новом, он не меняет поведение), если это имеет значение.

Кто-нибудь знает, что происходит?

...