VisualStudio — Как автоматически создавать средства доступа для функций базового класса, когда базовый класс находится в другой сборке?

У меня следующая установка. Решение с 3 проектами.

Проект A, пространство имен A, класс A

Проект B, пространство имен B, класс B: A

и тестовый проект для модульных тестов на B. Чтобы получить доступ к частным функциям B, я создаю метод доступа в своем тестовом проекте, используя Создать частный доступ -> Тест.

Кажется, что A находится в другой сборке, VS не создает функции доступа для A.


person Gerd K    schedule 23.01.2013    source источник
comment
Для частных лиц? Вы не можете получить доступ к закрытым членам/методам базового класса.   -  person Josh Smeaton    schedule 23.01.2013
comment
Не для частных лиц. В любом случае частные члены также должны быть доступны для базового класса, как указано здесь: /" rel="nofollow noreferrer">social.msdn.microsoft.com/Forums/en-US/vststest/thread/   -  person Gerd K    schedule 23.01.2013


Ответы (1)


Вам нужно использовать несколько аксессоров. Учти это:

// Assembly A
public class ClassA
{
    protected int someInt = 1;
    private void DoSthmWithA()
    {
        someInt = 10;
    }
}

// Assembly B
public class ClassB : ClassA
{
    private void DoSthmWithB()
    {
        someInt = 11;
    }
}

[TestMethod()]
public void Testing
{
    var target = new ClassB();

    var poA = new PrivateObject(target, new PrivateType(typeof (ClassA)));
    var poB = new PrivateObject(target);

    var accA = new ClassA_Accessor(poA);
    var accB = new ClassB_Accessor(poB);
    accA.DoSthmWithA();
    Assert.AreEqual(accA.someInt, 10);
    accB.DoSthmWithB();
    Assert.AreEqual(accA.someInt, 11);
}

or

[TestMethod()]
public void Testing
{
   var target = new ClassB();

   var poA = new PrivateObject(target, new PrivateType(typeof(ClassA)));
   var poB = new PrivateObject(target);

   poA.Invoke("DoSthmWithA");

   var accA = new ClassA_Accessor(poA);
   Assert.AreEqual(accA.someInt, 10);

   poB.Invoke("DoSthmWithB");

   Assert.AreEqual(accA.someInt, 11);
}
person nikita    schedule 24.01.2013
comment
Спасибо, это было решение для меня - person Gerd K; 24.01.2013