В этой главе мы протестируем нашу StringLibrary и для этого нам нужно изменить наши проекты, чтобы мы могли следовать соглашению по умолчанию.
Давайте откроем файл global.json .
{ "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-preview2-003131" } }
В верхней части этого файла вы увидите настройки проекта, и он по умолчанию настраивает некоторые папки, такие как src и test .
По соглашению у нас должны быть проекты в этих папках, это новое соглашение, которое будет использоваться как часть .NET Core.
В обозревателе решений вы можете видеть, что и консольный проект, и проект библиотеки находятся внутри папки src, а проект Testing — внутри папки test .
И структура проектов в обозревателе решений не показывает, где проекты физически существуют на диске. Давайте теперь откроем папку Solution и вы увидите, что проект StringLibrary не находится в папке src .
Вы можете видеть, что папки src и test отображаются в соответствии с соглашением, указанным в файле global.json . Тем не менее, у нас есть один проект StringLibrary, который выходит за рамки соглашения. Давайте теперь добавим проект StringLibrary внутри папки src .
В папке src у нас есть два проекта, и нам нужно исправить проблему, чтобы мы могли правильно использовать все проекты. Вернемся к Visual Studio, щелкните правой кнопкой мыши проект StringLibrary и выберите параметр «Удалить». Он не удалит его, но удалит только проект.
Теперь щелкните правой кнопкой мыши на папке src и выберите « Добавить» → «Существующий проект».
Перейдите к проекту StringLibrary, который сейчас находится в папке src , выберите файл StringLibrary.csproj и нажмите кнопку « Открыть» .
Теперь нам нужно удалить ссылку на StringLibrary из файла project.json консольного приложения.
{ "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" }, "NuGet.CommandLine": "3.5.0", "System.Runtime.Serialization.Json": "4.0.3" }, "frameworks": { "netcoreapp1.0": { "dependencies": { }, "imports": "dnxcore50" } } }
Сохраните изменения и затем снова добавьте ссылку на StringLibrary в ваш консольный проект.
{ "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" }, "NuGet.CommandLine": "3.5.0", "System.Runtime.Serialization.Json": "4.0.3" }, "frameworks": { "netcoreapp1.0": { "dependencies": { "StringLibrary": { "target": "project" } }, "imports": "dnxcore50" } } }
Теперь все должно работать снова, и вы можете собрать StringLibrary, а затем FirstApp (консольный проект) без каких-либо ошибок. Теперь давайте проверим функциональность StringLibrary с помощью xunit. Нам нужно добавить ссылку на StringLibrary в наш тестовый проект. Щелкните правой кнопкой мыши на проекте References of StringLibraryTests и выберите Add Reference…
Нажмите OK, чтобы добавить ссылку на StringLibrary в наш тестовый проект. Давайте теперь заменим следующий код в файле Tests.cs .
using System; using Xunit; using StringLibrary; namespace Tests { public class Tests { [Fact] public void StartsWithUpperCaseTest() { string input = "Mark"; Assert.True(input.StartsWithUpper()); } [Fact] public void StartsWithLowerCaseTest() { string input = "mark"; Assert.True(input.StartsWithLower()); } [Fact] public void StartsWithNumberCaseTest() { string input = "123"; Assert.True(input.StartsWithNumber()); } } }
Вы можете видеть, что у нас есть три метода тестирования, которые будут проверять функциональность StringLibrary. Давайте перейдем по ссылке Run All, и вы увидите следующий вывод в Test Explorer.
Вы также можете запустить тесты из командной строки. Давайте откроем командную строку и выполним тестовую команду dotnet .