Skip to content

pilagod/nextmock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NextMock Build Status Coverage Status

NextMock is an enhanced mock for unittest.mock.Mock.

Features

  • Argument matching supported.
  • Async version (AsyncMock) provided.
  • Compatible with unittest.mock.Mock.

Usage

First install nextmock from pip:

$ pip install nextmock

then import Mock for common usage, AsyncMock for async usage:

from nextmock import Mock
from nextmock import AsyncMock

API with Examples

with_args

Return/raise stub result/error only when given args are matched.

Check out /nextmock/test/test_mock_with_args.py for comprehensive exmaples.

  • args matching

    m = Mock()
    
    m.with_args(1, 2, 3).returns(123)
    
    assert m(1, 2, 3) == 123
    assert m(3, 2, 1) != 123
  • kwargs matching

    m = Mock()
    
    m.with_args(a=1, b=2, c=3).returns(123)
    
    assert m(a=1, b=2, c=3) == 123
    assert m(a=3, b=2, c=1) != 123
  • class matching

    class Cmd:
        def __init__(self, a: int, b: str):
            self.a = a
            self.b = b
    
    m = Mock()
    
    m.with_args(Cmd(1, "123")).returns(123)
    
    assert m(Cmd(1, "123")) == 123
    assert m(Cmd(999, "321")) != 123
  • args matcher

    from nextmock import Arg
    
    m = Mock()
    
    m.with_args(1, 2, Arg.Any).returns(123)
    
    assert m(1, 2, 1) == 123
    assert m(1, 2, 9) == 123
    assert m(1, 2, "123") == 123
  • error raising

    m = Mock()
    
    m.with_args(1, 2, 3).raises(ValueError("value error"))
    
    with pytest.raises(ValueError) as e:
        m(1, 2, 3)
    
    assert str(e.value) == "value error"
  • enum matching (0.0.1)

    class Category(Enum):
        A = "a"
        B = "b"
    
    m = Mock()
    
    m.with_args(Category.A).returns(123)
    
    assert m(Category.A) == 123
    assert m(Category.B) != 123

returns

Return stub result without matching args.

m = Mock()

m.returns(123)

assert m(1, 2, 3) == 123
assert m(a=1, b=2, c=3) == 123

raises

Raise stub error without matching args.

m = Mock()

m.raises(ValueError("value error"))

with pytest.raises(ValueError) as e:
    m(1, 2, 3)

with pytest.raises(ValueError) as e:
    m(a=1, b=2, c=3)

Compatibility

Inherit behavior from unittest.mock.Mock.

Check out /nextmock/test/test_mock_compatibility.py for comprehensive examples.

m = Mock()

m.return_value = 123

assert m(1, 2, 3) == 123

m.assert_called_once()
m.assert_called_with(1, 2, 3)

License

© Chun-Yan Ho (pilagod), 2020-NOW

Released under the MIT License

About

NextMock is an enhanced mock for unittest.mock.Mock

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •