Visual Studio 2010 Premium MSTest ошибка?

Ниже приведен тестовый код.

namespace ConsoleApplication2
{
    class MyClass {}
    class Program
    {
        static void Main(string[] args) { }

        List<MyClass> Test() { return new List<MyClass>(); }
    }
}

Затем с помощью Visual Studio создайте тест объединения для метода Test().

    [TestMethod()]
    [DeploymentItem("ConsoleApplication2.exe")]
    public void TestTest()
    {
        Program_Accessor target = new Program_Accessor(); // TODO: Initialize to an appropriate value
        List<MyClass_Accessor> actual;
        actual = target.Test();
        Assert.IsTrue(actual != null);
    }

При запуске теста будет получено следующее исключение. Как обойти проблему?

Test method TestProject1.ProgramTest.TestTest threw exception:  
System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[ConsoleApplication2.MyClass]' to type 'System.Collections.Generic.List`1[ConsoleApplication2.MyClass_Accessor]'.

Я попробовал следующий метод, но он тоже не работает.

IEnumerable<MyClass> Test1() { return new List<MyClass>(); }

person ca9163d9    schedule 15.07.2012    source источник


Ответы (1)


Ваша программа и ваш метод не являются общедоступными, поэтому MSTest и любой другой код не могут их вызвать. MS Test построил оболочку Program_Accessor для использования вашего кода через отражение.

Измените свой код, чтобы использовать модификатор доступа public, и заново создайте тест. Это самый простой способ изучить модульное тестирование.

public class Program
{
   public class MyClass{}

   static void Main(string[] args) { }

   public List<MyClass> Test() { return new List<MyClass>(); }
}

Вы можете использовать InternalsVisibleToAttribute, если не хотите делать MyClass общедоступным.

Сборки друзей в MSDN

person Dmitry Harnitski    schedule 15.07.2012
comment
Я обнаружил, что и класс Program, и метод Test могут быть частными. Класс MyClass должен быть публичным. Однако я предпочитаю не публиковать MyClass. - person ca9163d9; 15.07.2012