Доброго времени суток!
Сегодня для написания Unit - тестов решил использовать фреймворк Moq.
Тестирую WebApi (.net core). Тестовый фреймворк - xunit.
Столкнулся с проблемой разорвать порочную связь: контроллер-дб.
Пытался сделать Mock объекта ITable, но всё напрасно. Перерыл все форумы и статьи. Многие советуют уходить от Mock'инга DataConnection(DbContext) и делать всё через транзакции на живую в боевой БД.
Повторюсь, пишу Unit-тесты. А данные подходы являются полу интеграционными.
Вот допустим контроллер:
public class UserController
{
private DataManager db = null;
public UserController(DataManager dataManager)
{
this.db= dataManager;
}
public JsonResult Get()
{
var userDb = db.User.ToList();
var result = GetResponse(userDb); // Метод сериализующий данные в JsonResult
return result;
}
}
DataManager представляет собой сгенерированную по существующей таблице T4 модель (класс), сущность которого передаётся в контроллер через DI:
public partial class DataManager : LinqToDB.Data.DataConnection
{
public ITable<User> User { get { return this.GetTable<User>(); } }
partial void InitDataContext();
}
Вот данное свойство DataManager.User
и не получается Mock'нуть
У кого нибудь получилось подсунуть вместо данного свойства ITable какой-нибудь List, который можно ручками для тестов составить(вместо коннекта к реальной бд)????
На данный момент написал вот такой тест:
public class UserControllerTests
{
[Fact]
public void TestGet()
{
// Arrange
IEnumerable<User> expectedMas = new User[]
{
new User{ Id=1, Name= "q", Age=1, SurName= "q"},
new User{ Id=2, Name= "w", Age=2, SurName= "w"}
};
var mock = new Mock<DataManager>();
mock.Setup(usr => usr.User()).Returns(expectedMas); // Тут естественно ошибка компиляции, т.к. нельзя IEnumerable<User> привести к ITable<User>
UserController controller = new UserController(mock.Object);
// Act
var result = controller.Get() as IEnumerable<User>;
// Assert
Assert.NotNull(result);
Assert.Equal(expectedMas, result);
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
На просторах интернета пруд пруди онлайн-сервисов, но хочется чего-нибудь автономного
Необходимо внедрить play-services-gcm-100