![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Для написания unit-тестов я пользуюсь стандартными студийными возможностями - "Создать тестовый проект Visual C#" и пихаю туда тесты (суть классы и методы помеченные специальный атрибутами). Я не то чтобы фанат тестирования, просто писать тесты быстрее и проще, чем каким либо иным способом проверять написанную функциональность. И хотя я понимаю, что надо бы прочитать что-то про разработку через тестирование, про лучшие средства для него и тд, текущее положение дел меня вполне устраивает.
Однако, этот подход перестает работать, если пишешь код на чем-то отличном от C#/VB.NET/C++.NET, поскольку то ли в студию, то ли в mstest зашито данное ограничение. И хоть писать тесты на C# вполне приемлемо, это сильно раздражает. Как вообщем-то и ставить какие-то сторонние тулзы вроде NUnit большого желания нет, поскольку, во-первых, я уже привык к студийным возможностям вроде ведения списков тестов, ко всяким связанным с ними окошкам, а, во-вторых, предпочитаю по мере возможности пользоваться средствами из коробки.
Вообщем, мне надоело писать тесты к Nemerle на C# и я решил разобраться в проблеме. И хочу рассказать про вуду-решение, подходящее не только для Nemerle, но и для любых других языков .Net, не заапрувленных MS, вроде того же F#.
Первое, надо добавить в решение проект библиотеки на Nemerle (в моем случае это Nemerle.Mixins.Tests). К ней в зависимости добавить Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, открыть соответствующее пространство имен и написать пару тестов. Что-то вроде такого:
Второе, надо сделать так, чтобы скомпилированные бинарники лежали всегда в одной и той же папке, вне зависимости от выбранной конфигурации (удалить из OutputPath Debug/Release):

Третье, добавить в решение стандартный проект тестов C# (в моем случае это Nemerle.Mixins.TestWrapper) и удалить из него мусор в виде созданного по умолчанию UnitTest1.cs.
Четвертое, для проекта тестов C# сделать "добавить" -> "существующий элемент" -> установить фильтр на "Все файлы (*.*) и выбрать dll с немерлевыми тестами. Должно быть как-то так:

Пятое, указать в зависимостях решения, что проект-обертка тестов зависит от библиотеки с реальными тестами.

Всё. После этого все стандартные окошки для тестов начинают работать:

И можно писать тесты на языке основного проекта, не занимаясь освоением/настройкой сторонних средств. Немного неприятно, что вместо реального проекта с тестами везде фигурирует обертка, но жить можно. Идея не моя, нашел где-то в интернетах, а сейчас не могу найти линк на первоисточник (поправлю, если вдруг найду). Но решил поделиться, на всякий случай. Вдруг кому-то пригодится. Мало ли любителей маргинальщины, симпатизирующих студийным тестам, найдется.
Однако, этот подход перестает работать, если пишешь код на чем-то отличном от C#/VB.NET/C++.NET, поскольку то ли в студию, то ли в mstest зашито данное ограничение. И хоть писать тесты на C# вполне приемлемо, это сильно раздражает. Как вообщем-то и ставить какие-то сторонние тулзы вроде NUnit большого желания нет, поскольку, во-первых, я уже привык к студийным возможностям вроде ведения списков тестов, ко всяким связанным с ними окошкам, а, во-вторых, предпочитаю по мере возможности пользоваться средствами из коробки.
Вообщем, мне надоело писать тесты к Nemerle на C# и я решил разобраться в проблеме. И хочу рассказать про вуду-решение, подходящее не только для Nemerle, но и для любых других языков .Net, не заапрувленных MS, вроде того же F#.
Первое, надо добавить в решение проект библиотеки на Nemerle (в моем случае это Nemerle.Mixins.Tests). К ней в зависимости добавить Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, открыть соответствующее пространство имен и написать пару тестов. Что-то вроде такого:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class SimpleTest {
[TestMethod] public Fail() : void { Assert.IsTrue(1 == 2); }
[TestMethod] public Win() : void { Assert.IsTrue(1 == 1); }
}
Второе, надо сделать так, чтобы скомпилированные бинарники лежали всегда в одной и той же папке, вне зависимости от выбранной конфигурации (удалить из OutputPath Debug/Release):

Третье, добавить в решение стандартный проект тестов C# (в моем случае это Nemerle.Mixins.TestWrapper) и удалить из него мусор в виде созданного по умолчанию UnitTest1.cs.
Четвертое, для проекта тестов C# сделать "добавить" -> "существующий элемент" -> установить фильтр на "Все файлы (*.*) и выбрать dll с немерлевыми тестами. Должно быть как-то так:

Пятое, указать в зависимостях решения, что проект-обертка тестов зависит от библиотеки с реальными тестами.

Всё. После этого все стандартные окошки для тестов начинают работать:

И можно писать тесты на языке основного проекта, не занимаясь освоением/настройкой сторонних средств. Немного неприятно, что вместо реального проекта с тестами везде фигурирует обертка, но жить можно. Идея не моя, нашел где-то в интернетах, а сейчас не могу найти линк на первоисточник (поправлю, если вдруг найду). Но решил поделиться, на всякий случай. Вдруг кому-то пригодится. Мало ли любителей маргинальщины, симпатизирующих студийным тестам, найдется.