|
AccessViolationException в Unit-тесте
|
|||
---|---|---|---|
#18+
Сложновато будет объяснить, потому что кода много и я не могу его весь в одном посте написать. В общем есть исключение, которое вываливается ТОЛЬКО в Unit-тесте и ТОЛЬКО в режиме Run. В Debug не вываливается. Не могу понять в чем может быть дело. StackTrace ошибки: Test Name: ConvertModuleConvertNameTest1 Test FullName: UnitTest.ConvertModuleUnitTests.ConvertModuleConvertNameTest1 Test Source: e:\Projects\Visual Studio Projects\ActivityManager\UnitTest\ConvertModuleUnitTests.cs : line 4104 Test Outcome: Failed Test Duration: 0:00:00,0993823 Result Message: Test method UnitTest.ConvertModuleUnitTests.ConvertModuleConvertNameTest1 threw exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Result StackTrace: at Declensions.Unicode.Declension.decGetFIOPadegFS(IntPtr fio, Int32 sex, Int32 padeg, IntPtr result, Int32& resultLength) at Declensions.Unicode.Declension.GetSNPDeclension(String surnameNamePatronimic, Gender gender, DeclensionCase declensionCase) in e:\Projects\Visual Studio Projects\ActivityManager\Declension\DeclensionUnicode.cs:line 178 at ConvertModule.ConvertPlug.ConvertNameToCase(String nameIn, String format, TextCase textCase, String& nameOut) in e:\Projects\Visual Studio Projects\ActivityManager\ConvertModule\ConvertPlugin.cs:line 817 at ConvertModule.ConvertPlug.ConvertNameCellToCase(ReportRow inRow, String column, String format, TextCase textCase, ReportRow& outRow) in e:\Projects\Visual Studio Projects\ActivityManager\ConvertModule\ConvertPlugin.cs:line 866 at ConvertModule.ConvertPlug.ConvertNameColToCase(ReportTable inTable, String column, String format, TextCase textCase, ReportTable& outTable) in e:\Projects\Visual Studio Projects\ActivityManager\ConvertModule\ConvertPlugin.cs:line 896 at UnitTest.ConvertModuleUnitTests.ConvertModuleConvertNameTest1() in e:\Projects\Visual Studio Projects\ActivityManager\UnitTest\ConvertModuleUnitTests.cs:line 4106 Код Unit-теста: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код тестового консольного приложения: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Как видно из StackTrace исключение в методе decGetFIOPadegFS. Это unmanaged метод из библиотеки PadegUC.dll. Объявляется он так: Код: c# 1. 2.
Вызывается так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Консольное приложение работает под .Net 4.5, исключений нет. Есть еще одно приложение работающее под .Net 3.5, исключений нет. Пробовал в Release Mode отключать оптимизацию (галочку Optimize Code), не помогло. В общем получается так, что код работает (и возвращает корректные данные и не вызывает исключения нигде, кроме Unit-теста в режиме Run, специально проверил), но тест в Run не проходит. До этого использовалась библиотека Padeg.dll (не юникодовская), тест проходил на ура. Чем проект Unit-Test принципиально отличается от обычной dll? Почему может так происходить? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 15:28 |
|
AccessViolationException в Unit-тесте
|
|||
---|---|---|---|
#18+
в режиме Analize Code Coverage ошибки тоже не возникает никогда. Установка [MethodImpl(MethodImplOptions.NoOptimization)] не помогла. Уже все перепробовал, что в голову пришло, на сколько бы бредовым это не было... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 18:01 |
|
AccessViolationException в Unit-тесте
|
|||
---|---|---|---|
#18+
Проблема решена ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 04:29 |
|
|
start [/forum/topic.php?fid=20&msg=38842026&tid=1398866]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 257ms |
total: | 517ms |
0 / 0 |