小编san*_*nts的帖子

如何使用模拟来测试next_day_of_week函数

我正在跟踪在一周中的某一天(例如,该月的第一个星期日,该月的第三个星期五)重现的事件.我有一个DayOfWeek模型,用于存储活动的一周中的某一天.它包含一个方法next_day_of_week,用于将日期对象集返回到给定事件实例设置为的任何工作日的下一次出现(这有助于确定下一次出现事件的时间).

例如,2011年7月7日星期日:

  • 对于DayOfWeek设置为星期日的对象,next_day_of_week将返回2011年7月3日.
  • 对于DayOfWeek设置为星期一,它将返回2011年7月4日.
  • 对于DayOfWeek设置为星期六,它将返回2011年7月9日.

等等.我正在编写单元测试(我有史以来第一次;我提到过我对这些东西很新吗?)并且试图围绕如何测试这种方法.我知道我需要嘲笑一些东西,但我不太清楚是什么.这个问题似乎得到了我的要求:Python:试图模拟datetime.date.today()但不工作

所以我尝试在tests.py中模拟出datetime.date:

class FakeDate(date):
"A fake replacement for date that can be mocked for testing."
    def __new__(cls, *args, **kwargs):
        return date.__new__(date, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我创建了我的测试用例,在模拟类中修补并设置为今天7/3/2011:

class TestDayOfWeek(TestCase):
    """Test the day of the week functions."""

    @mock.patch('datetime.date', FakeDate)
    def test_valid_my_next_day_of_week_sameday(self):
        from datetime import date
        FakeDate.today = classmethod(lambda cls: date(2011, 7, 3)) # July 3, 2011 is a Sunday
        new_day_of_week = DayOfWeek.objects.create()
        new_day_of_week.day = "SU"
    self.assertEquals(new_day_of_week.my_next_day_of_week(), date(2011, 7, 3))
Run Code Online (Sandbox Code Playgroud)

供参考,这是模型类:

class DayOfWeek(ModelBase):
"""
Represents a day of the …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing

9
推荐指数
1
解决办法
1793
查看次数

SQS真的会为每条消息发送多个S3 PUT对象记录吗?

我已经设置了一个S3存储桶来将PUT对象上的事件发送到SQS,我正在处理EB工作层中的SQS队列.

SQS发送的消息的架构如下:http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

记录是一个数组,意味着可以在一个POST中将多个记录发送到我的工作人员的端点.这实际发生了吗?或者我的工作人员每封邮件只会收到一条记录吗?

无论收到的消息中有多少记录,工作者只能返回一个响应,200(成功处理消息)或非200(消息未成功处理,将其重新放入队列).

因此,如果我的工作人员在一条消息中收到多条记录,并且它成功地处理了一些(例如通过插入数据库等副作用)但是在一个或多个上失败,我应该如何处理?如果我返回200,那么失败的那些将不会被重试.但是如果我返回非200,那么成功处理的那些将被不必要地重试,并且可能重新插入.因此,我必须让我的工作人员足够聪明,只能重试失败的 - 这是我不想写的逻辑.

如果每封邮件只发送一条记录,这将更容易.所以,如果实际情况如此,尽管记录是阵列,我真的很想知道!

amazon-s3 amazon-web-services amazon-elastic-beanstalk

9
推荐指数
1
解决办法
2769
查看次数