Skip to content

aea.test_tools.test_skill

This module contains test case classes based on pytest for AEA skill testing.

_MetaBaseSkillTestCase Objects

class _MetaBaseSkillTestCase(ABCMeta)

A metaclass that validates BaseSkillTestCase's class.

__new__

def __new__(mcs, name: str, bases: Tuple, namespace: Dict,
            **kwargs: Any) -> Type

Initialize the class.

BaseSkillTestCase Objects

class BaseSkillTestCase(ABC, metaclass=_MetaBaseSkillTestCase)

A class to test a skill.

skill

@property
def skill() -> Skill

Get the skill.

get_quantity_in_outbox

def get_quantity_in_outbox() -> int

Get the quantity of envelopes in the outbox.

get_message_from_outbox

def get_message_from_outbox() -> Optional[Message]

Get message from outbox.

drop_messages_from_outbox

def drop_messages_from_outbox(number: int = 1) -> None

Dismiss the first 'number' number of message from outbox.

get_quantity_in_decision_maker_inbox

def get_quantity_in_decision_maker_inbox() -> int

Get the quantity of messages in the decision maker inbox.

get_message_from_decision_maker_inbox

def get_message_from_decision_maker_inbox() -> Optional[Message]

Get message from decision maker inbox.

drop_messages_from_decision_maker_inbox

def drop_messages_from_decision_maker_inbox(number: int = 1) -> None

Dismiss the first 'number' number of message from decision maker inbox.

assert_quantity_in_outbox

def assert_quantity_in_outbox(expected_quantity: int) -> None

Assert the quantity of messages in the outbox.

assert_quantity_in_decision_making_queue

def assert_quantity_in_decision_making_queue(expected_quantity: int) -> None

Assert the quantity of messages in the decision maker queue.

message_has_attributes

@staticmethod
def message_has_attributes(actual_message: Message,
                           message_type: Type[Message],
                           **kwargs: Any) -> Tuple[bool, str]

Evaluates whether a message's attributes match the expected attributes provided.

Arguments:

  • actual_message: the actual message
  • message_type: the expected message type
  • kwargs: other expected message attributes

Returns:

boolean result of the evaluation and accompanied message

build_incoming_message

def build_incoming_message(message_type: Type[Message],
                           performative: Message.Performative,
                           dialogue_reference: Optional[Tuple[str,
                                                              str]] = None,
                           message_id: Optional[int] = None,
                           target: Optional[int] = None,
                           to: Optional[Address] = None,
                           sender: Optional[Address] = None,
                           is_agent_to_agent_messages: Optional[bool] = None,
                           **kwargs: Any) -> Message

Quickly create an incoming message with the provided attributes.

For any attribute not provided, the corresponding default value in message is used.

Arguments:

  • message_type: the type of the message
  • dialogue_reference: the dialogue_reference
  • message_id: the message_id
  • target: the target
  • performative: the performative
  • to: the 'to' address
  • sender: the 'sender' address
  • is_agent_to_agent_messages: whether the dialogue is between agents or components
  • kwargs: other attributes

Returns:

the created incoming message

build_incoming_message_for_skill_dialogue

def build_incoming_message_for_skill_dialogue(
        dialogue: Dialogue,
        performative: Message.Performative,
        message_type: Optional[Type[Message]] = None,
        dialogue_reference: Optional[Tuple[str, str]] = None,
        message_id: Optional[int] = None,
        target: Optional[int] = None,
        to: Optional[Address] = None,
        sender: Optional[Address] = None,
        **kwargs: Any) -> Message

Quickly create an incoming message with the provided attributes for a dialogue.

For any attribute not provided, a value based on the dialogue is used. These values are shown in parentheses in the list of parameters below.

NOTE: This method must be used with care. The dialogue provided is part of the skill which is being tested. Because for any unspecified attribute, a "correct" value is used, the test will be, by design, insured to pass on these values.

Arguments:

  • dialogue: the dialogue to which the incoming message is intended
  • performative: the performative of the message
  • message_type: (the message_class of the provided dialogue) the type of the message
  • dialogue_reference: (the dialogue_reference of the provided dialogue) the dialogue reference of the message
  • message_id: (the id of the last message in the provided dialogue + 1) the id of the message
  • target: (the id of the last message in the provided dialogue) the target of the message
  • to: (the agent address associated with this skill) the receiver of the message
  • sender: (the counterparty in the provided dialogue) the sender of the message
  • kwargs: other attributes

Returns:

the created incoming message

prepare_skill_dialogue

def prepare_skill_dialogue(
        dialogues: Dialogues,
        messages: Tuple[DialogueMessage, ...],
        counterparty: Optional[Address] = None,
        is_agent_to_agent_messages: Optional[bool] = None) -> Dialogue

Quickly create a dialogue.

The 'messages' argument is a tuple of DialogueMessages. For every DialogueMessage (performative, contents, is_incoming, target): - if 'is_incoming' is not provided: for the first message it is assumed False (outgoing), for any other message, it is the opposite of the one preceding it. - if 'target' is not provided: for the first message it is assumed 0, for any other message, it is the index of the message before it in the tuple of messages + 1.

Arguments:

  • dialogues: a dialogues class
  • counterparty: the message_id
  • messages: the dialogue_reference
  • is_agent_to_agent_messages: whether the dialogue is between agents or components

Returns:

the created incoming message

setup_class

@classmethod
def setup_class(cls, **kwargs: Any) -> None

Set up the skill test case.

Only called once at the beginning before test methods on the test class are called.

Arguments:

  • kwargs: the keyword arguments passed to _prepare_skill

setup

def setup(**kwargs: Any) -> None

Set up the test method.

Called each time before a test method is called.

Arguments:

  • kwargs: the keyword arguments passed to _prepare_skill

teardown

def teardown() -> None

Teardown the test method.

Called each time after a test method is called.

empty_message_queues

def empty_message_queues() -> None

Empty message queues

reset_all_dialogues

def reset_all_dialogues() -> None

Reset the state of all dialogues