【发布时间】:2021-12-18 14:19:58
【问题描述】:
我目前正在尝试为这样的方法编写单元测试
public bool SaveSchema(Schema newSchema, NpgsqlTransaction transaction)
并且该方法被解析的属性是一个模式和一个 NpgsqlTransaction 事务。 架构可以很容易地生成,因为它的代码我可以完全访问,但交易有点不同。
我似乎想不出一个嘲弄的好方法?
我尝试为它编写包装器,但 NpgsqlTransaction 没有公共构造函数,所以 不可能做一个,或者我最终把整个东西写了两次
这是我的尝试——难道没有更好的方法来模拟 NpgsqlTransaction 吗?
public class NpgsqlConnectionAdapter : INpgsqlConnectionAdapter
{
private readonly NpgsqlConnection npgsqlConnection;
public NpgsqlConnectionAdapter()
{
npgsqlConnection = new();
}
public NpgsqlTransaction BeginTransaction()
{
return npgsqlConnection.BeginTransaction();
}
public void Commit()
{
}
}
public class NpgsqlTransactionAdapter : INpgsqlTransactionAdapter
{
private readonly NpgsqlTransaction npgsqlTransaction;
public void Commit()
{
npgsqlTransaction.Commit();
}
}
public interface INpgsqlConnectionAdapter
{
}
public interface INpgsqlTransactionAdapter
{
}
【问题讨论】:
-
只是不要这样做。您希望针对真实数据库进行集成测试来测试这些东西,那么您应该在此之上有一个层,您可以在其余代码中进行测试。
标签: c# unit-testing mocking moq npgsql