首页 > 解决方案 > IDbConnection 的数据库连接模拟问题

问题描述

我编写了一个类,它在每个时间间隔根据条件获取记录并更新表。

我必须为数据库连接、插入和更新值编写测试用例。我想使用最小起订量或 C# 提供的任何框架来完成。

我查看了多个堆叠页面并遵循了它。然而,它没有成功。

我试图首先模拟数据库连接。这是代码。

跟踪服务.cs

namespace AutocancellationService
{
    public partial class Trackservice : ServiceBase,Servicecalls
    {
        private Servicecalls connectionFactory;

        public Trackservice(Servicecalls connectionFactory)
        {
            this.connectionFactory = connectionFactory;
        }

         public IDbConnection DatabaseConnection()
        {
            var connection = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
            cnn = new SqlConnection(connection);
            cnn.Open();
            return cnn;
        }

        public void Autocancellation(object source, ElapsedEventArgs e)
        {
            try
            {
                lock (this)
                {
                    ServiceLogFile("Database check :" + DateTime.Now);
                    DatabaseConnection();
                    if (cnn.State == ConnectionState.Open)
                    {
                        //select and update  
                    }
              }
        }
}

保持模拟方法的接口 -

namespace AutocancellationService
{
    public interface Servicecalls
    {
       IDbConnection DatabaseConnection();
    } 
}

测试方法 -

    namespace AutocancellationServiceTests
    {
        [TestClass]
        public class AutocancellationServiceTests
        {
            [TestMethod]
            public void DatabaseconnectionTest()
            {
                var commandMock = new Mock<IDbCommand>();
                commandMock
                    .Setup(m => m.ExecuteNonQuery())
                    .Verifiable();

                var connectionMock = new Mock<IDbConnection>();
                connectionMock
                    .Setup(m => m.CreateCommand())
                    .Returns(commandMock.Object);

                var ConnectionMock = connectionMock.Object.State.ToString();

                var connectionFactoryMock = new Mock<Servicecalls>();
                connectionFactoryMock
                    .Setup(m => m.DatabaseConnection())
                    .Returns(connectionMock.Object);

                var actual = connectionMock.Object;

             //Assert.AreEqual(expected, actual);

            }
        }
    }

当我尝试打印 connectionMock 时 - 我的连接状态为 Closed。并且测试用例失败了。我在我的代码中尝试了连接。它工作得很好。请求协助。

标签: c#databasenunitmoq

解决方案


推荐阅读