Произошло исключение «System.InvalidProgramException: JIT-компилятор обнаружил внутреннее ограничение» - PullRequest
2 голосов
/ 28 июля 2011

Пример кода:

Ниже приведен неполный код, но этого достаточно, чтобы показать проблему с массой, с которой я столкнулся.

namespace ClassLibrary1
{
    class Class1
    {
         internal static void sum(ref List<TestClass> a, int b) 
         {

             //some code

         }
     }

}

В той же сборке есть другой класс

namespace ClassLibrary1 
{
    class TestClass
    { 
         //code

    }

 }

когда я создаю блок тестового примера для суммы метода, тогда код будет выглядеть как

[TestMethod()] 
public void sumTest()
{
    List<TestClass_Accessor> lstTestClass = new List<TestClass_Accessor>(); 
    Class1_Accessor.sum(ref lstTestClass, b); 
}

Проблема: в приведенном выше коде я создаю список типа TestClass, но это закрытый класс, поэтому VSTS создает TestClass_Accessor для доступафункциональность класса.В методе Sum он принимает параметр как ссылку на список типа «TestClass».

Я также отладил свой код, но когда отлажен

Class1_Accessor.sum(ref lstTestClass, b);, выдается исключение «System.InvalidProgramException: JIT компилятор обнаружил внутреннее ограничение ".

Когда я создал список строкового типа, он работает, то есть список не имеет проблем.

Согласно моему пониманию, проблема заключается в типе списка.в модульном тесте мы создаем список типа TestClass_Accessor.

И в списке классов есть тип List<TestClass>.

, пожалуйста, предоставьте решение для этого.

С уважением,

Нитин Саху

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Использование «ref» является частью проблемы здесь. У меня была такая же проблема, и она ушла, когда я не использовал ключевое слово "ref".

Как уже говорила Пери, использование ref здесь не требуется.

0 голосов
/ 31 июля 2011

У меня проблемы с пониманием того, что Ты говоришь.Но ... TestClass не является приватным в предоставленном Вами коде.По умолчанию он является внутренним, если не указан модификатор доступа.И Вы можете легко получить доступ к внутренним участникам в своих тестах.Возможно, у вас не возникнет никаких проблем, когда вы устраните дополнительные вещи (TestClass_Accessor).

Смотрите здесь: Как протестировать Framework, если модульные тесты находятся в отдельной сборке?

И кстати, вам не нужно ref при передаче эталонных значений.

...