Мне трудно передать ложный предмет в мой контейнер. Пример конкретного юнит-теста работает. Оба теста всегда используют конкретный класс. Что я делаю неправильно в примере, показанном ниже.
Я просто создаю класс-оболочку, потому что CloudStorageAccounts
- это методы stati c.
Я использую Moq
, StructureMap
и MSTest
Менеджер класса
public class Manager
{
private IAzureCloudStorageWrapper m_AzureCloudStorageWrapper;
public Manager(IAzureCloudStorageWrapper azureCloudStorageWrapper)
{
m_AzureCloudStorageWrapper = azureCloudStorageWrapper;
}
public Microsoft.WindowsAzure.Storage.CloudStorageAccount Parse(string connectionString)
{
return m_AzureCloudStorageWrapper.Parse(connectionString);
}
}
Реестр
public class InstanceScanner : Registry
{
private IAzureCloudStorageWrapper m_AzureCloudStorageWrapper;
public InstanceScanner()
{
Scan(_ =>
{
_.Assembly("Ifx");
_.AssemblyContainingType<IAzureCloudStorageWrapper>();
_.AddAllTypesOf<IAzureCloudStorageWrapper>().NameBy(x => x.Name.Replace("AzureCloudStorageWrapper", ""));
_.WithDefaultConventions();
});
}
[SetterProperty]
public IAzureCloudStorageWrapper Provider
{
set { m_AzureCloudStorageWrapper = value; }
}
[SetterProperty]
public bool ShouldCache { get; set; }
}
Интерфейс
public interface IAzureCloudStorageWrapper
{
CloudStorageAccount Parse(string connectionString);
}
Реализация
public class AzureCloudStorageWrapperImplementation : IAzureCloudStorageWrapper
{
public Microsoft.WindowsAzure.Storage.CloudStorageAccount Parse(string connectionString)
{
return Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(connectionString);
}
}
Модульные тесты
[TestMethod]
public void Container_Parse_WithMockedClass_ReturnConnectionString()
{
string stringConnection = "UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1";
var cloudStorageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(stringConnection);
var container = new Container(new InstanceScanner());
var mockAzureStorage = new Mock<IAzureCloudStorageWrapper>();
mockAzureStorage.Setup(x => x.Parse(It.IsAny<string>()))
.Returns(cloudStorageAccount)
.Verifiable();
container.With<Mock<IAzureCloudStorageWrapper>>(mockAzureStorage);
var manager = container.GetInstance<Manager>();
var storage = manager.Parse(stringConnection);
var stringConnectionResult = storage.ToString();
Assert.AreEqual(stringConnectionResult, stringConnection);
}
[TestMethod]
public void Container_Parse_WithConcreteClass_ReturnConnectionString()
{
var container = new Container(new InstanceScanner());
var manager = container.GetInstance<Manager>();
string stringConnection = "UseDevelopmentStorage=true;DevelopmentStorageProxyUri=https://127.0.0.1";
var storage = manager.Parse(stringConnection);
var stringConnectionResult = storage.ToString();
Assert.AreEqual(stringConnectionResult, stringConnection);
}