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’.