Существуют ограничения на то, что вы можете издеваться, используя Moq. Это более подробно описано здесь.
Могу ли я использовать moq Mock для насмешки над классом, а не интерфейсом?
Более привычно использовать Moq с интерфейсом или хотя бы абстрактным классом.
Я реорганизовал ваш код, чтобы API реализовывал интерфейс IAPI. Затем выполняется IAPI.
Я изменил ваш тестовый метод, чтобы вы вызывали метод GetPollData () из смоделированного объекта, а не из реального объекта.
Его также рекомендуется вводить Ваша зависимость от бизнес-класса в конструкторе для API, так что вы можете смоделировать это позже, если это будет необходимо. Я позволю тебе сделать это.
using Moq;
using NUnit.Framework;
namespace EntitlementServer.Core.Tests
{
public interface IAPI
{
int GetPollData();
}
public class API : IAPI
{
public Business business { get; set; }
public API()
{
business = new Business();
}
public int GetPollData()
{
return 20;
}
}
public class Business
{
public int polltime()
{
return Service.poll;
}
}
public static class Service
{
public static int poll = 20;
}
[TestFixture]
public class Apitest
{
// Testing the GetPollData method
[Test]
public void TestGetPollData()
{
var api = new Mock<IAPI>();
api.Setup(x => x.GetPollData()).Returns(10);
int value = api.Object.GetPollData();
Assert.AreEqual(10, value);
}
}
}