Skip to main content

ExploTest

Project description

Some assumptions on the transformer and how to fix your code:

  1. Generally, no global states. As the transformer essentially runs your input again, for any sequence of inputs, it is assumed that the result running the sequence twice will be the same. This means that global states that may change during
    testing is not testable. This also means singleton patterns are more or less untestable. Pass the mechanism in as a class instead.

To fix:

Before:

node_id = 0

def get_new_id() -> int:
    global node_id
    node_id += 1
    return node_id


class Foo:
    def __init__(self):
        self.node_id = get_new_id()


if __name__ == "__main__":   # When testing
    assert Foo().node_id == 1

After:

class IDGenerator:
    def __init__(self):
        self.node_id = 0
        
        
    def get_next_id(self) -> int:
        self.node_id += 1
        return self.node_id


class Foo:
    def __init__(self, id_gen: IDGenerator):
        self.node_id = id_gen.get_next_id()

if __name__ == "__main__":  # When testing
    id_generator = IDGenerator()
    assert Foo(id_generator).node_id == 1

or

class IDGenerator:
    def __init__(self):
        self.node_id = 0


    def get_new_id(self) -> int:
        self.node_id += 1
        return self.node_id

id_generator: IDGenerator = None

def get_next_id():
    if id_generator is None:
        raise Exception()  # Can also return some default value
    return id_generator.get_new_id()

def set_id_generator(id_gen: IDGenerator):
    global id_generator
    id_generator = id_gen
    
class Foo:
    def __init__(self):
        self.node_id = get_next_id()
        
if __name__ == "__main__":  # When testing
    set_id_generator(IDGenerator())
    assert Foo().node_id == 1
  1. (If using the print exploration function):
    • A single point of return, situated at the bottom of the file
    • The state is not changed after the print
    • A returned value (if tuples) is a subset of exploratory print expression
    • The test generated is not super robust; specifically the test generated might not cover the entire list if the iterator loops through all the items (the index isn't retrievable)
    • Either the function is at the top level, or it is directly in some top level class (i. e. this must be directly retrievable at the top level)
    • Zero support for anonymous functions. Why would you want to test that?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

explotest-0.1.5.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ExploTest-0.1.5-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file explotest-0.1.5.tar.gz.

File metadata

  • Download URL: explotest-0.1.5.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.4

File hashes

Hashes for explotest-0.1.5.tar.gz
Algorithm Hash digest
SHA256 cabe9fa6ff70f071af088cdcc836e0eed1d3e64a9000e0f91cd1daa0811ed9f4
MD5 bcf29ac44e4a7bd70e0f2e246971b7d0
BLAKE2b-256 a0c1d99c3ebd265fc944df95cf7a5fa5f432d24c6fd1ff4300a2d23ecc112495

See more details on using hashes here.

File details

Details for the file ExploTest-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: ExploTest-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.4

File hashes

Hashes for ExploTest-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d74c1ea9b0054e2cb13c2a3a4dd9bdf0ce3ccacbeb8fad818818331574c897e8
MD5 d9bbb1e473e1ae10683c8ab2ddc91c47
BLAKE2b-256 c7b0493ea2595e9bb2fa41a201829e4c920ed208ba9d29ff66055eaf5bf2fb4e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page