W poprzednim poście pokazałem jak można stworzyć projekt testowy przy użyciu ASP.NET Core. Tym razem przedstawię jak poradziłem sobie z tworzeniem dodawaniem biblioteki do mockowania w ASP.NET Core. Podobnie jak w przypadku testowania, trzeba pobrać odpowiednią bibliotekę do mockowania, która jest kompatybilna z ASP.NET Core.
Na dzień dzisiejszy udało mi się znaleźć dwie biblioteki, które są kompatybilne: LightMock oraz Moq. Postanowiłem użyć drugiego rozwiązania: Moq. Bardzo przydatny tutorial znalazłem na stronie dotnetlibery.com. Faktyczne instrukcje znalazłem w połowie postu (nagłówek: Setting up Moq on .NET Core).
Na początku musiałem znaleźć NuGet Packages Manager: Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution. Następnie postępowałem zgodnie z tutorialem, aby dodać nowe źródło skąd mogą być dodawane paczki do projektu. Następnie w projekcie testowym w pliku project.json dodałem nowe linijki:
{ "version": "1.0.0-*", "description": "", "authors": [ "" ], "tags": [ "" ], "projectUrl": "", "licenseUrl": "", "dependencies": { "xunit": "2.1.0", "xunit.runner.dnx": "2.1.0-rc1-build204" }, "commands": { "test": "xunit.runner.dnx" }, "frameworks": { "dnx451": { "dependencies": { "PokerWebsite": "1.0.0-*", "Moq": "4.2.1312.1622" } }, "dnxcore50": { "dependencies": { "PokerWebsite": "1.0.0-*", "moq.netcore": "4.4.0-beta8" } } } }
Zmieniłem kod klasy testowej:
using Moq; using PokerWebsite.Core.Domain; using PokerWebsite.Core.Repositories; using Xunit; namespace PokerWebsiteTests { public class Class1 { [Fact] public void PassingTest() { var mock = new Mock<IPlayerRepository>(); var player = new Player(); Assert.Equal(4, Add(2, 2)); } } }
Skompilowałem projekt, odpaliłem test. Test przeszedł, mockowanie działa.
Podczas gdy próbowałem podpiąć mockowanie pod projekt testowy otrzymywałem różnego rodzaju błędy. Jednym z nich był:
Multiple assemblies with equivalent identity have been imported: and Remove one of the duplicate references.
Podczas gdy co chwilę zmieniałem zależności project.json coś się w końcu popsuło :). Odpowiedź jak rozwiązać ten problem była podana jak na tacy:
Wystarczyło w cmd odaplić polecenie ‚dnu restore’.