Use pytest to discover test cases
# See the License for the specific language governing permissions and
# limitations under the License.
#
-import glob
-import sys
-import unittest
+import pytest
+import glob
import os
+import sys
from test.integrationtests.skills.skill_tester import MockSkillsLoader
from test.integrationtests.skills.skill_tester import SkillTest
-SKILL_PATH = '/opt/mycroft/skills'
+SKILL_PATH = '/opt/mycroft/skills/'
def discover_tests():
global SKILL_PATH
- if len(sys.argv) > 1:
- SKILL_PATH = sys.argv.pop(1)
+ if len(sys.argv) > 2:
+ SKILL_PATH = sys.argv.pop()
tests = {}
skills = [
skill for skill
@@ -46,40 +46,15 @@ def discover_tests():
return tests
-class IntentTestSequenceMeta(type):
- def __new__(mcs, name, bases, d):
- def gen_test(a, b):
- def test(self):
- if not SkillTest(a, b, self.emitter).run(self.loader):
- assert False
- return test
-
tests = discover_tests()
- for skill in tests.keys():
- skill_name = os.path.basename(skill) # Path of the skill
- for example in tests[skill]:
- # Name of the intent
- example_name = os.path.basename(
- os.path.splitext(os.path.splitext(example)[0])[0])
- test_name = "test_IntentValidation[%s:%s]" % (skill_name,
- example_name)
- d[test_name] = gen_test(skill, example)
- return type.__new__(mcs, name, bases, d)
-
-
-class IntentTestSequence(unittest.TestCase):
- __metaclass__ = IntentTestSequenceMeta
-
- @classmethod
- def setUpClass(self):
- self.loader = MockSkillsLoader(SKILL_PATH)
- self.emitter = self.loader.load_skills()
-
- @classmethod
- def tearDownClass(self):
- self.loader.unload_skills()
-
+loader = MockSkillsLoader(SKILL_PATH)
+emitter = loader.load_skills()
-if __name__ == '__main__':
- unittest.main()
+class TestCase(object):
+ @pytest.mark.parametrize("skill,example", sum([
+ [(skill, example) for example in tests[skill]]
+ for skill in tests.keys()
+ ], []))
+ def test_skill(self, skill, example):
+ assert SkillTest(skill, example, emitter).run(loader)
