如何在单元测试中使用Redis?

领主12

假设我的控制器类中有一个方法可以更新Redis数据库中键,值对的分数。我想编写一个单元测试来检查分数是否不为null并增加1。我只想查看单元测试如何与Redis一起使用,以及如何从特定键,值对中提取分数并检查其有效性。

控制器类//当用户刷新api / do / v1 / togglelike / {id}“时,该用户的分数将以​​Redis更新,并增加1;否则,该分数将增加1。

[HttpGet]
        [Route("api/do/v1/togglelike/{id}")]
        public IHttpActionResult ToggleLike(String id)
        {
            var currentUser = "mike";


            var likeSet = redis1.SortedSetRangeByScore("likes:" + id);
            var likeStatus = redis1.SortedSetScore("likes:" + id, currentUser);

            //Current user has not yet liked the profile
            if (likeStatus == null)
            {
                redis1.SortedSetAdd("likes:" + id, currentUser, 1);
                return Ok("Like Added");

            }
            /*redis1.SortedSetAdd("likes:" + id, currentUser, 1);
            return Ok("Like Added");*/
            else
            {
                double counter = redis1.SortedSetIncrement("likes:" + id, currentUser, 1);
                 redis1.SortedSetAdd("likes:" + id, currentUser, counter);
                 return Ok("Like Added");
                /*redis1.SortedSetRemove("likes:" + id, currentUser);
                return Ok("Like Removed");*/
            }
        }

测试类:我想从键,值对中获取分数,并检查其是否等于有效数字;

namespace VideoControllerTest
{
    [TestClass]
    public class VideoControllerTest
    {
         IDatabase redis1;

        public VideoControllerTest()
        {
            redis1 = RedisFactory.Connection.GetDatabase();
        }

        [TestMethod]
        public void VideoController_Adview()
        {
            //Arrange
            VideoController controller = new VideoController();
            //Act
            IHttpActionResult actionResult = controller.ToggleLike("video123");

            //Assert; Check to see the counter is incremented by 1 and is not null;

        }
    }
}
低飞鹈鹕

为了能够对外部系统(在这种情况下为redis数据库)进行单元测试,您必须模拟外部系统。

如果redis1接口是一个接口,则可以使用Mock这样的框架轻松地对其进行模拟,如果它是一种实现,则将很困难,并且必须使用自己的类将其包装以对其进行模拟。

您需要将IDatabase传递给控制器​​,因此我添加了另一个构造函数。

class VideoController
{
    private IDatabase redis1;

    public VideoController(IDatabase db)
    {
        this.redis1 = db;
    }
}

测试方法应如下

//note : library used for mocking is moq (https://github.com/Moq/moq4)
        [TestMethod]
        public void VideoController_Adview()
        {
        //Arrange
            Mock<IDatabase> mockRedis = new Mock<IDatabase>();
            //set existing score as null
            mockRedis.Setup(r => r.SortedSetScore(It.isAny<string>,It.isAny<string>)).Returns(null); 

            VideoController controller = new VideoController(mockRedis.Object);


            //Act
            IHttpActionResult actionResult = controller.ToggleLike("video123");
            //verify added once
            mockRedis.Verify(r => r.SortedSetAdd("likes:videio123",1), Times.Once());
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中的不同实现中使用相同的单元测试?

如何在单元测试中使用JSON发送请求

如何在单元测试中使用Mockito或任何Mocking框架模拟Guice Injection?

Junit / Fongo:如何在单元测试中使用Fongo来检查NotNull

如何在iOS 7.1中使用NSURLSession对HTTP请求和响应进行单元测试?

如何在单元测试中使用熊猫数据框

如何在单元测试中使用全局变量?

如何在Xcode 6.1.1中使用Google Test运行本地C ++单元测试

如何在单元测试中使用assert_frame_equal

使用CSS模块时如何在Jest单元测试中使用CSS选择器

如何在单元测试用例中使用角度2中的文本查找右键

如何在Angular 4中使用提供程序模拟组件?- 单元测试

如何在RxJava 2中使用TestObserver对对象列表进行单元测试?

如何在VSTS的单元测试中使用敏感数据?

如何在Mocha异步单元测试中使用afterEach?

如何在单元测试中使用android依赖项?

如何在组件中使用翻译以使其对单元测试有用

如何在单元测试中使用协程测试Livedata

如何在Spring Boot单元测试中使用依赖注入?

如何在Grails单元测试中使用VndErrorJsonRenderer

Android / Java单元测试-如何在java.lang.reflect.Method中使用参数?

如何在单元测试中使用断言?

如何在F#中使用NUnit单元测试来测试代码

如何在Ember单元测试中使用库?

如何在Python中使用Mockito编写单元测试

如何在仪器化的单元测试中使用文件

模拟 API 响应时如何在单元测试中使用 JSON 文件

如何在 ASP.NET Core 中使用 mysql 进行单元测试、actionresult

如何在单元测试中使用敏感数据?