Вопросы о кодовом модуле C # продолжаются - PullRequest
2 голосов
/ 26 апреля 2010

больше вопросов после вопросов здесь: C # вопросы кодового теста

Я обнаружил, что тестовый кадр модульного теста VS обрабатывает private и protected метод аналогичным образом, но отличается от метода public.

Ниже приведен сгенерированный код для метода private:

        /// <summary>
        ///A test for recordLogin
        ///</summary>
        [TestMethod()]
        [DeploymentItem("SystemSoftware.exe")]
        public void recordLoginTest()
        {
            User_Accessor target = new User_Accessor(); // TODO: Initialize to an appropriate value
            Guid userId = new Guid(); // TODO: Initialize to an appropriate value
            string action = string.Empty; // TODO: Initialize to an appropriate value
            Users user = null; // TODO: Initialize to an appropriate value
            AndeDBEntities db = null; // TODO: Initialize to an appropriate value
            bool expected = false; // TODO: Initialize to an appropriate value
            bool actual;
            actual = target.recordLogin(userId, action, user, db);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }

Вопросы:

  1. [DeploymentItem("SystemSoftware.exe")] для private и protected методов, зачем это нужно и для чего?

  2. В моем исходном классе / файле, если я укажу на оригинальный метод и попробую "Find All References". Ссылка в классе / файле модульного теста не будет отображаться для методов private и protected, но будет отображаться для всех методов public. Это почему? Это правильно?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2010

[DeploymentItem ( "SystemSoftware.exe")] для частных и защищенных методов, зачем это нужно и зачем?

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

DeploymentItemAttribute сообщает исполнителю теста, какие артефакты (и такие зависимости, как сборки доступа или файлы тестовых данных) должны быть развернуты, чтобы код можно было правильно выполнить. По сути, это неявно указывает платформе MSTest на создание и развертывание сборки средства доступа в этом случае.

В моем исходном классе / файле, если я укажу к оригинальному методу и попробуйте «Найти все ссылки». Ссылка в модуле теста класс / файл не будет показать для частного и защищенного методы, но он будет отображаться для всех публичные методы. Это почему? Это право

См. Выше, вы не имеете прямого доступа к ним, но используете для этого прокси. Этот прокси-сервер использует отражение во время выполнения для привязки вашего вызова, поэтому его нельзя отследить в Visual Studio.

1 голос
/ 26 апреля 2010

Find All References не найдет эти тесты, потому что они используют класс метода доступа (User_Accessor) вместо реального класса (User) для доступа к protected и private методам. Класс accessor генерируется автоматически и выполняет некоторые трюки для раскрытия тех, которые обычно недоступны.

1 голос
/ 26 апреля 2010

[DeploymentItem ("SystemSoftware.exe")] для закрытых и защищенных методов, зачем он нужен и для чего он нужен?

Он определяет (файл) ресурсы, которые нужны тесту (вы можете применить к тестовому классу или отдельным методам). Так как методы тестирования должны быть общедоступными, я не могу понять, почему вы применили бы это к private или protected методу.

Атрибут задокументирован: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...