Skip to content

Can't mock a @property without calling it? #339

@shish

Description

@shish

I'm using TestSlide version: 2.7.0

Given:

import testslide

class SampleClass:
    @property
    def prop(self) -> str:
        raise RuntimeError("must not be called")

    def meth(self) -> str:
        raise RuntimeError("must not be called")


class SampleTest(testslide.TestCase):
    def test_prop_attr(self) -> None:
        host = SampleClass()
        self.patch_attribute(host, "prop", "patched")
        self.assertEqual(host.prop, "patched")

    def test_prop_callable(self) -> None:
        host = SampleClass()
        self.mock_callable(host, "prop").to_return_value("patched")
        self.assertEqual(host.prop, "patched")

    def test_meth(self) -> None:
        host = SampleClass()
        self.mock_callable(host, "meth").to_return_value("patched")
        self.assertEqual(host.meth(), "patched")

When I run:
testslide patch_test.py

I expected this to happen:
prop() is not called

But, instead this happened:
prop() is called, both when using patch_attribute and mock_callable.

patch_test.SampleTest
  test_meth
  test_prop_attr: RuntimeError: must not be called
  test_prop_callable: RuntimeError: must not be called

Failures:

  1) patch_test.SampleTest: test_prop_attr
    1) RuntimeError: must not be called
      File "patch_test.py", line 15, in test_prop_attr
        self.patch_attribute(host, "prop", "patched")
      File "patch_test.py", line 6, in prop
        raise RuntimeError("must not be called")

  2) patch_test.SampleTest: test_prop_callable
    1) RuntimeError: must not be called
      File "patch_test.py", line 20, in test_prop_callable
        self.mock_callable(host, "prop").to_return_value("patched")
      File "patch_test.py", line 6, in prop
        raise RuntimeError("must not be called")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions