Аннотация настойчивость и сообщение TIBCO из вашего класса. Например. вы можете использовать некоторые хранилища интерфейса для связи с SQL сервером:
public interface IProductsRepository
{
IEnumerable<Product> GetSomeProducts();
// other members
}
и некоторыми воротами для communcation с TIBCO (я назвал его Шток, но вы должны предоставить конкретные имена бизнеса):
public interface IStockGateway
{
void DoSomethingWithProducts(IEnumerable<Product> products);
// other members
}
Затем сделайте ваш класс зависит от этих абстракций. Вы сможете высмеять их и проверить поведение класса:
public class ProductDataServiceProvider
{
private IProductsRepository _productRepository;
private IStockGateway _stockGateway;
// inject implementations
public ProductDataServiceProvider(
IProductRepository productRepository,
IStockGateway stockGateway)
{
_productRepository = productRepository;
_stockGateway = stockGateway;
}
public void ProcessProductFeed()
{
// use repository and gateway
}
}
Теперь, чтобы проверить. Каковы обязанности вашего провайдера - получить некоторые продукты из репозитория продукта (реализация этого репозитория будет загружать продукты из базы данных SQL) и передать их на шлюз (реализация шлюза будет публиковать продукты в TIBCO). Вот тест, который использует библиотеку Moq:
[TestMethod]
public void ShouldPassSomeProjectToStock()
{
// Arrange
var products = new List<Product>() { }; // create some products
var mockRepository = new Mock<IProductRepository>();
mockRepository.Setup(r => r.GetSomeProducts()).Returns(products);
var mockGateway = new Mock<IStockGateway>();
mockGateway.Setup(g => g.DoSomethingWithProducts(products));
var provider = new ProductDataServiceProvider(mockRepository.Object,
ockGateway.Object);
// Act
provider.ProcessProductFeed();
// Assert
mockRepository.VerifyAll(); // verify products retrieved from repository
mockGateway.VerifyAll(); // verify products passed to gateway
}
Особое внимание следует уделять тестированию каждого компонента в изоляции. Тестирование всего этого за один раз - IMHO очень опасно, так как это означает, что логические ошибки в бизнесе могут маскироваться другими слоями. – Mgetz
Тестирование всех компонентов вместе было бы интеграционным тестом, а не единичным тестом. – Romoku
@Romoku Я знаю, но люди часто забывают об этом и делают такие вещи, как [test moq] (http://stackoverflow.com/questions/15062403/moq-testing-void-method?rq=1) – Mgetz