NUnit Test с Moq и множеством недостающих данных, это правильно?

1

У меня есть только следующие входные данные: интерфейс и класс. У меня нет класса, который реализует интерфейс, никаких данных о клиенте, его идентификаторах и других данных. Только следующее:

public interface IService
{
double GetData(int clientId);
}

public class ClientInfo
{
   private int _clientId;
   private IService _svc;
   public double MoneySun;

   public ClientInfo(int clientId, IService svc) 
  {
   _clientId = clientId;
   _svc = svc;
  }


   public void UpdateMoney()
   {
    MoneySun = _svc.GetData(_clientId);
   }

}

И мне нужно написать Unit-тест для метода UpdateMoney (учитывая, что у меня есть только информация, опубликованная выше)

Я написал следующий тест и хотел бы проконсультироваться, правильно это или нет?

[Test]
public void GetData()
{
    Mock<IService> moqSvc = new Mock<IService>();
    var сInfo = new ClientInfo(1, moqSvc.Object);
    сInfo.UpdateMoney();

    Assert.Greater(сInfo.MoneySun, -1); 
}

А также, делая Assert, я только догадываюсь, что это должно быть больше, чем -1, поэтому я не совсем уверен, правильно ли это. Также я предполагаю, что есть clientId = 1

Теги:
unit-testing
moq
nunit

1 ответ

2

Поскольку вы тестируете фасад/прокси-сервер службы, насмехаясь над интерфейсом службы, вы сможете определить, правильно ли взаимодействует с издеваемым интерфейсом (необходимо выполнить единичные тесты на другом конце провода для фактического обслуживания, чтобы убедиться, что правильная транзакция была выполнена клиенту).

Вы также можете проверить, что состояние сут (ClientInfo) согласовано до и после вызова:

[Test]
public void GetData()
{
    var moqSvc = new Mock<IService>();
    // Provide some fake data to ensure that the SUT uses the return value correctly
    moqSvc.Setup(x => x.GetData(It.IsAny(int))).Returns(123.45);
    var сInfo = new ClientInfo(1, moqSvc.Object);
    // Ensure correct initial state
    Assert.AreEqual(0, cInfo.MoneySun)

    сInfo.UpdateMoney();

    // Ensure correct final state
    Assert.AreEqual(123.45, cInfo.MoneySun)
    // Ensure correct interaction with the service
    moqSvc.Verify(x => x.GetData(1), Times.Once);
    moqSvc.Verify(x => x.GetData(It.IsAny<int>(i => i != 1)), Times.Never);
}
  • 2
    +1. Обратите внимание, что проверка взаимодействия может потребоваться в качестве отдельного теста или не проводится вообще, в зависимости от вашего назначения ИЛИ руководящих принципов кодирования команды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню