Testing#

Asset Validator comes with two classes to help you test your Rules.

  • ValidationTestCaseMixin: A mixin for test cases to simplify testing of individual Validation Rules.

  • AsyncioValidationTestCaseMixin: A mixin for asyncio test cases to simplify testing of individual Validation Rules.

ValidationTestCaseMixin#

You could mix ValidationTestCaseMixin with TestCase as follows:

from omni.asset_validator.tests import ValidationTestCaseMixin
from unittest import TestCase

class ValidationTestCase(TestCase, ValidationTestCaseMixin): ...

An example to implement a test case would look like:

class RuleTest(ValidationTestCase):

    def test_rule(self):
        self.assertSuccess(
            asset=get_url("pass.usda"),
            rule=MyRule,
        )
        self.assertFailure(
            asset=get_url("fail.usda"),
            rule=MyRule,
        )

AsyncioValidationTestCaseMixin#

You could mix AsyncioValidationTestCaseMixin with IsolatedAsyncioTestCase as follows:

from omni.asset_validator.tests import AsyncioValidationTestCaseMixin
from unittest import IsolatedAsyncioTestCase

class AsyncioValidationTestCase(IsolatedAsyncioTestCase, AsyncioValidationTestCaseMixin): ...

An example to implement a test case would look like:

class RuleTest(AsyncioValidationTestCase):

    async def test_rule(self):
        await self.assertSuccessAsync(
            asset=get_url("pass.usda"),
            rule=MyRule,
        )
        await self.assertFailureAsync(
            asset=get_url("fail.usda"),
            rule=MyRule,
        )

Assertions#

Additionally you could verify for specific issues, for example:

class RuleTest(AsyncioValidationTestCase):

    async def test_rule(self):
        await self.assertRuleAsync(
            asset=get_url("fail.usda"),
            rule=MyRule,
            asserts=[
                IsAFailure("Invalid condition")
            ]
        )

IsAFailure can match to multiple attributes, like message, rule, requirement, location, etc

Fixes#

class RuleTest(AsyncioValidationTestCase):

    async def test_rule(self):
        await self.assertSuggestionAsync(
            asset=get_url("fail.usda"),
            rule=MyRule,
        )