stdray: (Default)
[personal profile] stdray
Для написания 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, открыть соответствующее пространство имен и написать пару тестов. Что-то вроде такого:

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 с немерлевыми тестами. Должно быть как-то так:



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



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



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

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags