2015-06-14 1 views
0

Я создал простой C#/Net решение с 2 проектов:.Visual Studio 2013 Test Проводник

  • библиотека классов.
  • Единичный тестовый проект с одним классом UnitTest, и я добавил Moq к этому проекту.

Затем я создал три метода UnitTest, которые используют Moq, чтобы издеваться над одним классом, который затем вводится в другой класс.

using System; 
using System.Collections.Generic; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Moq; 

namespace MockSimple.Test 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void TestMethod1() 
     { 
      var mock = new Mock<ClassImplementingFunctionality>(); 
      mock.Setup(functionality => functionality.Add(It.IsAny<int>(), It.IsAny<int>())).Returns(4); 
      var classUnderTest = new ClassUnderTest(mock.Object); 
      classUnderTest.Method(2,2); 
      mock.Verify(m => m.Add(It.IsAny<int>(), It.IsAny<int>()), Times.Exactly(1)); 
     } 

     [TestMethod] 
     [ExpectedException(typeof(ArgumentException))] 
     public void TestMethod2() 
     { 
      var mock = new Mock<ClassImplementingFunctionality>(); 
      mock.Setup(functionality => functionality.Add(It.IsAny<int>(), It.IsAny<int>())).Returns(0); 
      var classUnderTest = new ClassUnderTest(mock.Object); 
      classUnderTest.Method(10,5); 
     } 

     [TestMethod] 
     public void TestMethod3() 
     { 
      var ints = new List<int> {1, 2, 3, 4}; 
      var mock = new Mock<ClassImplementingFunctionality>(); 
      mock.Setup(functionality => functionality.Add(It.IsAny<int>(), It.IsAny<int>())).Returns(4); 
      var classUnderTest = new ClassUnderTest(mock.Object); 
      classUnderTest.LoopInts(ints); 
      mock.Verify(m => m.Add(It.IsAny<int>(), It.IsAny<int>()), Times.Exactly(ints.Count)); 
     } 

     [TestMethod] 
     public void TestMethod4() 
     { 
      var ints = new List<int> { 1, 2, 3, 4, -5, -2, -7 }; 
      var mock = new Mock<ClassImplementingFunctionality>(); 
      mock.Setup(functionality => functionality.Add(It.IsAny<int>(), It.IsAny<int>())).Returns(4); 
      var classUnderTest = new ClassUnderTest(mock.Object); 
      classUnderTest.LoopInts(ints); 
      mock.Verify(m => m.Add(It.IsAny<int>(), It.IsAny<int>()), Times.Exactly(4)); 
     } 

    } 
} 

Но при попытке запустить тестовые методы, используя встроенный тест-менеджер в VS2013, я получаю следующее сообщение об ошибке в тесте окно вывода:

------ Run test started ------ 
The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information. 
Value does not fall within the expected range. 
Resulting in: An exception occurred while trying to create an instance of type 'Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection'. 
Resulting in: Cannot activate part 'Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection'. 
Element: 'Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection' --> Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection 
Resulting in: Cannot get export 'Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection (ContractName="Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection")' from part 'Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection'. 
Element: Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection (ContractName="Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection") --> Microsoft.VisualStudio.TestWindow.Model.TestGroupCollection 
========== Run test finished: 4 run (0:00:00,3464634) ==========* 

я могу легко запускать тестовые методы с использованием Resharper Unit Test Framework.

Для меня похоже, что MSTest пытается сделать инъекцию зависимостей или ищет конфигурацию MEF или Unity.

Любые идеи?

+0

показать ли этот вопрос вверх для новый проект тестирования модулей? Если да, то можете ли вы попробовать удалить/переименовать эту папку: '% AppData% \ .. \ Local \ Microsoft \ VisualStudio \ 12.0 \ ComponentModelCache' и перезапустить VS. –

+0

Да - ошибка также появляется для нового проекта, и удаление файла кэша, как описано, не помогает. – ThomasE

+0

Я думаю, что это может быть параметр, связанный с Окно проводника тестеров, который поврежден. Я все еще могу отлаживать методы тестирования. – ThomasE

ответ

1

GRACI, GRACI ...

в командной Разработчик Devenv Prompt выполнения/rootSuffix ехр

Команда выше решить проблему :-)

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

  • Нет связанных вопросов^_^