def METHOD_NAME(self, tmp_path):
    # Shell will raise an error if program is not found
    with pytest.raises(BuildTestError):
        Shell("xyz")
    # input argument to Shell must be a string, any other value will raise an exception
    with pytest.raises(BuildTestError):
        Shell(["sh"])
    shell = Shell()
    # update shell.path to invalid program will raise an error. In this case we use tmp_path to set a random filepath
    # to shell.path and we expect Shell to raise an exception of type BuildTestError
    with pytest.raises(BuildTestError):
        shell.path = tmp_path
    # input must be valid shell we can't set shell to arbitrary linux command
    with pytest.raises(BuildTestError):
        Shell("pwd")
    # test invalid shell with shell options
    with pytest.raises(BuildTestError):
        Shell("ls -l ")
    # invoking a valid shell but later changing shell path to an invalid shell will result in error
    with pytest.raises(BuildTestError):
        shell = Shell()
        shell.path = "/bin/ls"