Тип или имя пространства имен 'PrivateObject' не найден - PullRequest
0 голосов
/ 13 ноября 2018

Я использую Visual Studio 2017, и я пытался создать модульный тест частного метода в C # (код ниже):

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void TestCalculator_Hello()
    {
        var calc = new Calculator(1);

        var privateObject = new PrivateObject(calc);

        string expected = "hello!";

        string result = privateObject.Invoke("HelloTest");
        Assert.AreEqual(expected, result);
    }


}

Однако, я получил это сообщение об ошибке:

Ошибка CS0246 Тип или имя пространства имен 'PrivateObject' не может быть найдено

Я искал статьи и учебники, но я все еще не знаю, что я делаю неправильно.

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

если вы наведите курсор мыши на PrivateObject (и щелкните правой кнопкой мыши .. есть ли опция перехода к определению?

, эта команда скажет вам, что, по ее мнению, этот класс ..

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

Если это так, вы можете добавить ссылку на него черезваш менеджер пакетов NuGet или щелкнув правой кнопкой мыши по проекту и перейдя в Add Reference.

Также не забудьте добавить пространство имен в верхнюю часть файла с помощью оператора using, как только они все будут на месте, он должен знать, что этообъект в этом месте. Вы не должны получать никаких ошибок в этот момент, и ваше контекстное меню «Перейти к определению» должно привести вас к фактическому определению класса.

0 голосов
/ 19 июня 2019

PrivateObject и PrivateType недоступны для проектов, ориентированных на netcoreapp2.0.Здесь есть проблема GitHub: GitHub Issue 366

Один из вариантов - наследовать от класса и затем предоставлять метод в унаследованном классе.

0 голосов
/ 13 ноября 2018

Хотя PrivateObject использует то же пространство имен Microsoft.VisualStudio.TestTools.UnitTesting, что и TestMethodAttribute и связанные атрибуты, оно принадлежит отдельной сборке

Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll

Убедитесь, что сборкана него ссылается тестовый проект.

Вам также необходимо привести результат, потому что Invoke возвращает object

string result = (string)privateObject.Invoke("HelloTest");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...