Я пытаюсь написать модульные тесты вокруг службы, которая будет управлять связью с различными очередями SQS. Я не могу добавить в мой класс Mocked версии IAmazonSQS. У меня есть следующий конструктор:Невозможно ввести тип объекта Mock при использовании AWS SDK и Moq
private AmazonSQSClient client;
public SqsQueue(IAmazonSQS client, string queueUrl)
{
this.client = (AmazonSQSClient)client;
this.queueUrl = queueUrl;
}
Проблемная строка - это назначение this.client. Я получаю это исключение: Additional information: Unable to cast object of type 'Castle.Proxies.IAmazonSQSProxy' to type 'Amazon.SQS.AmazonSQSClient'.
Когда я изменить эту строку следующим образом:
this.client = client as AmazonSQSClient;
this.client установлено нулевое значение.
Это соответствующий код модульного тестирования:
public void Setup()
{
this.mockClient = new Mock<IAmazonSQS>();
this.queueUrl = "testUrl";
}
public void GetMessageCount_WhenMessagesExist_ReturnsCount()
{
// Arrange
var sqsQueue = new SqsQueue<IMessage>(this.mockClient.Object, this.queueUrl); // Calls into the constructor above.
}
Я пропускаю что-то очевидное здесь?
Был как бы на вопрос, но вы поняли это. Классы должны зависеть от абстракций (интерфейса/абстрактного), а не от конкреций (класса), поэтому, имея конкретный класс как локальную переменную, все еще означает, что класс тесно связан с реализацией, а не с абстракцией. – Nkosi