2010-04-26 4 views
2

еще вопросы после вопросов здесь: C# unit test code questionsC# вопросы модульного тестирования кода продолжают

Я нашел тест VS блок testframe лечения 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. Почему это? Это правильно?

ответ

1

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

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

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

1

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

2

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

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

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

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

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

Смежные вопросы