def test(self):
        # mydatetime.datetimeにパッチを当てるなら
        # mydatetimeをトップレベルでインポートしても大丈夫。
        # やはりdatetime.datetimeに手を入れるのが間違いのようだ。
        with mock.patch("mydatetime.datetime") as M:
            M.now.return_value = 10
            self.assertEqual(mydatetime.now(), 10)

        # nowをモックに置き換えようとするとエラーになる。
        # nowではなくdatetimeの方を置き換えるのが正解。
        with self.assertRaises(TypeError):
            # TypeError:
            #   can't set attributes of
            #   built-in/extension type 'datetime.datetime'
            with mock.patch("datetime.datetime.now") as M2:
                M2.return_value = 77
                self.assertEqual(mydatetime.now(), 77)

        with self.assertRaises(TypeError):
            # TypeError:
            #   can't set attributes
            #   of built-in/extension type 'datetime.datetime'
            with mock.patch("mydatetime.datetime.now") as M3:
                M3.return_value = 77
                self.assertEqual(mydatetime.now(), 77)
Beispiel #2
0
    def test_builtin_extension1(self):
        """datetime.nowをモックに置き換えようとするとエラーになる。

        nowではなくdatetimeの方を置き換えるのが正解。
        """
        # TypeError: can't set attributes of
        #            built-in/extension type 'datetime.datetime'
        with mock.patch("datetime.datetime.now") as M:
            M.return_value = 77
            self.assertEqual(mydatetime.now(), 77)
    def test_builtin_extension1(self):
        """datetime.nowをモックに置き換えようとするとエラーになる。

        nowではなくdatetimeの方を置き換えるのが正解。
        """
        # TypeError: can't set attributes of
        #            built-in/extension type 'datetime.datetime'
        self.mox.StubOutWithMock(datetime.datetime, "now")
        datetime.datetime.now().AndReturn(77)
        self.mox.ReplayAll()
        self.assertEqual(mydatetime.now(), 77)
Beispiel #4
0
    def test_builtin_extension2(self):
        """datetime.nowをモックに置き換えようとするとエラーになる。

        mydatetimeに所属するdatetime.nowでも
        結局のところ組み込みのdatetime.nowを指すのでやはりエラーになる。
        """
        # TypeError: can't set attributes
        #            of built-in/extension type 'datetime.datetime'
        with mock.patch("mydatetime.datetime.now") as M:
            M.return_value = 77
            self.assertEqual(mydatetime.now(), 77)
    def test_builtin_extension2(self):
        """datetime.nowをモックに置き換えようとするとエラーになる。

        mydatetimeに所属するdatetime.nowでも
        結局のところ組み込みのdatetime.nowを指すのでやはりエラーになる。
        """
        # TypeError: can't set attributes
        #            of built-in/extension type 'datetime.datetime'
        self.mox.StubOutWithMock(mydatetime.datetime, "now")
        mydatetime.datetime.now().AndReturn(77)
        self.mox.ReplayAll()
        self.assertEqual(mydatetime.now(), 77)
    def test_import_timing(self):
        """インポートのタイミングによって結果が変わることを示す例。

        こちらはモックがうまく適用される。

        前提: mydatetimeがdatetimeをインポートする。

        1. datetime.datetimeをモックと置き換える。
        2. mydatetimeをインポートする。
        3. mydatetimeの中でdatetimeがインポートされる。
           (この時点で既にdatetime.datetimeはモックに置き換わっている。)
        4. モックに置き換えられたのdatetime.nowを使うのでテストは成功する。

        NOTE: 正解はインポートのタイミングを変えることではなくて、
              mydatetime.datetimeにモックを適用することなので注意。
              (datetime.datetimeを対象にしない)
        """
        with mock.patch("datetime.datetime") as M:
            M.now.return_value = 10
            import mydatetime
            self.assertEqual(mydatetime.now(), 10)
    def test_import_timing(self):
        """インポートのタイミングによって結果が変わることを示す例。

        前提: mydatetimeがdatetimeをインポートする。

        1. datetimeをインポートする。
        2. mydatetimeをインポートする。
        3. mydatetimeの中でdatetimeがインポートされる。
        4. datetime.datetimeをモックと置き換える。
        5. 2のdatetimeと3のdatetimeは別扱いなので
           mydatetime.datetimeを利用するmydatetime.nowはモックを見ない。
        6. モックに置き換えられる前のdatetime.nowを使うのでテストが失敗する。

        NOTE: 正解はインポートのタイミングを変えることではなくて、
              mydatetime.datetimeにモックを適用することなので注意。
              (datetime.datetimeを対象にしない)
        """
        import datetime
        import mydatetime
        self.mox.StubOutWithMock(datetime, "datetime")
        datetime.datetime.now().AndReturn(10)
        self.mox.ReplayAll()
        self.assertEqual(mydatetime.now(), 10)
Beispiel #8
0
    def test_import_timing(self):
        """インポートのタイミングによって結果が変わることを示す例。

        前提: mydatetimeがdatetimeをインポートする。

        1. mydatetimeをインポートする。
        2. mydatetimeの中でdatetimeがインポートされる。
        3. datetime.datetimeをモックと置き換える。
        4. 2のdatetimeと3のdatetimeは別扱いなので
           mydatetime.datetimeを利用するmydatetime.nowはモックを見ない。
        5. モックに置き換えられる前のdatetime.nowを使うのでテストが失敗する。

        NOTE: 正解はインポートのタイミングを変えることではなくて、
              mydatetime.datetimeにモックを適用することなので注意。
              (datetime.datetimeを対象にしない)
        """
        # ここでmydatetimeをインポートすると失敗する。
        # AssertionError:
        #   datetime.datetime(2012, 9, 5, 10, 42, 3, 984193) != 10
        import mydatetime
        with mock.patch("datetime.datetime") as M:
            M.now.return_value = 10
            self.assertEqual(mydatetime.now(), 10)
    def test_import_timing(self):
        """インポートのタイミングによって結果が変わることを示す例。

        こちらはモックがうまく適用される。

        前提: mydatetimeがdatetimeをインポートする。

        1. datetimeをインポートする。
        2. datetime.datetimeをモックと置き換える。
        3. mydatetimeをインポートする。
        4. mydatetimeの中でdatetimeがインポートされる。
           (この時点で既にdatetime.datetimeはモックに置き換わっている。)
        5. モックに置き換えられたのdatetime.nowを使うのでテストは成功する。

        NOTE: 正解はインポートのタイミングを変えることではなくて、
              mydatetime.datetimeにモックを適用することなので注意。
              (datetime.datetimeを対象にしない)
        """
        import datetime
        self.mox.StubOutWithMock(datetime, "datetime")
        import mydatetime  # StubOutWithMockの前にインポートするとモックが当たらない。
        datetime.datetime.now().AndReturn(10)
        self.mox.ReplayAll()
        self.assertEqual(mydatetime.now(), 10)
 def _callFUT(self):
     return mydatetime.now()
 def test(self):
     import mydatetime
     self.assertEqual(mydatetime.now(), 10)
Beispiel #12
0
 def test(self):
     self.assertEqual(mydatetime.now(), 10)
 def _callFUT(self):
     import mydatetime
     return mydatetime.now()