aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Sebastiaan Zeeff <[email protected]>2019-10-11 19:54:47 +0200
committerGravatar Sebastiaan Zeeff <[email protected]>2019-10-11 19:54:47 +0200
commit6d9cb1ad99d064d8810feb553c6b0463c74c92d4 (patch)
tree065acf7342c0c474cce894ee36ae26cc7d582134
parentAdd tests for tests.base (diff)
Change pipeline testrunner to xmlrunner
I have change the testrunner from `unittest` to `xmlrunner` in the Azure pipeline to be able to publish our test results on Azure. This is the same runner as `site` uses to generate XML reports. In addition, I've cleaned up some small mistakes in docstrings and `README.md`.
-rw-r--r--.gitignore4
-rw-r--r--Pipfile1
-rw-r--r--Pipfile.lock10
-rw-r--r--azure-pipelines.yml13
-rw-r--r--tests/README.md6
-rw-r--r--tests/helpers.py14
6 files changed, 31 insertions, 17 deletions
diff --git a/.gitignore b/.gitignore
index 261fa179f..210847759 100644
--- a/.gitignore
+++ b/.gitignore
@@ -114,5 +114,5 @@ log.*
# Custom user configuration
config.yml
-# JUnit XML reports from pytest
-junit.xml
+# xmlrunner unittest XML reports
+TEST-**.xml
diff --git a/Pipfile b/Pipfile
index 0c73e4ca2..48d839fc3 100644
--- a/Pipfile
+++ b/Pipfile
@@ -32,6 +32,7 @@ flake8-tidy-imports = "~=2.0"
flake8-todo = "~=0.7"
pre-commit = "~=1.18"
safety = "~=1.8"
+unittest-xml-reporting = "~=2.5"
dodgy = "~=0.1"
[requires]
diff --git a/Pipfile.lock b/Pipfile.lock
index 366d1e525..95955ff89 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "f5f32a03b561f1805f52447ca4e6582dd459581c5d581638925b7fabb09869f8"
+ "sha256": "c27d699b4aeeed204dee41f924f682ae2a670add8549a8826e58776594370582"
},
"pipfile-spec": 6,
"requires": {
@@ -880,6 +880,14 @@
],
"version": "==1.4.0"
},
+ "unittest-xml-reporting": {
+ "hashes": [
+ "sha256:140982e4b58e4052d9ecb775525b246a96bfc1fc26097806e05ea06e9166dd6c",
+ "sha256:d1fbc7a1b6c6680ccfe75b5e9701e5431c646970de049e687b4bb35ba4325d72"
+ ],
+ "index": "pypi",
+ "version": "==2.5.1"
+ },
"urllib3": {
"hashes": [
"sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4",
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 15470f9be..da3b06201 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -30,11 +30,11 @@ jobs:
- script: python -m flake8
displayName: 'Run linter'
- - script: BOT_API_KEY=foo BOT_TOKEN=bar WOLFRAM_API_KEY=baz coverage run -m unittest
+ - script: BOT_API_KEY=foo BOT_TOKEN=bar WOLFRAM_API_KEY=baz coverage run -m xmlrunner
displayName: Run tests
- - script: coverage xml -o coverage.xml
- displayName: Create test coverage report
+ - script: coverage report -m && coverage xml -o coverage.xml
+ displayName: Generate test coverage report
- task: PublishCodeCoverageResults@1
displayName: 'Publish Coverage Results'
@@ -43,6 +43,13 @@ jobs:
codeCoverageTool: Cobertura
summaryFileLocation: coverage.xml
+ - task: PublishTestResults@2
+ condition: succeededOrFailed()
+ displayName: 'Publish Test Results'
+ inputs:
+ testResultsFiles: '**/TEST-*.xml'
+ testRunTitle: 'Bot Test Results'
+
- job: build
displayName: 'Build & Push Container'
dependsOn: 'test'
diff --git a/tests/README.md b/tests/README.md
index 085ea39e0..471a00923 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -1,8 +1,8 @@
# Testing our Bot
-Our bot is one of the most important tools we have to help us run our community. To make sure that tool doesn't break, we decided to start testing it using unit tests. It is our goal to provide it with 100% test coverage in the future. This guide will help you get started with writing the tests needed to achieve that.
+Our bot is one of the most important tools we have to help us run our community. To make sure that tool doesn't break, we've decided to start writing unit tests for it. It is our goal to provide it with 100% test coverage in the future. This guide will help you get started with writing the tests needed to achieve that.
-_**Note:** This is a practical guide to getting started with writing tests for our bot, not a general introduction to writing unit tests in Python. If you're looking for a more general introduction, you may like Corey Schafer's [Python Tutorial: Unit Testing Your Code with the unittest Module](https://www.youtube.com/watch?v=6tNS--WetLI) or Ned Batchelder's PyCon talk [Getting Started Testing](https://www.youtube.com/watch?v=FxSsnHeWQBY).
+_**Note:** This is a practical guide to getting started with writing tests for our bot, not a general introduction to writing unit tests in Python. If you're looking for a more general introduction, you may like Corey Schafer's [Python Tutorial: Unit Testing Your Code with the unittest Module](https://www.youtube.com/watch?v=6tNS--WetLI) or Ned Batchelder's PyCon talk [Getting Started Testing](https://www.youtube.com/watch?v=FxSsnHeWQBY)._
## Tools
@@ -43,7 +43,7 @@ Since it's important to make sure all of our tests are independent from each oth
By using the `subTest` context manager, we can perform multiple independent subtests within one test method (e.g., by having a loop for the various inputs we want to test). Using this context manager ensures the test will be run independently and that, if one of them fails, the rest of the subtests are still executed. (Normally, a test function stops once the first exception, including `AssertionError`, is raised.)
-An example (taken from [`test_converters.py`])(/tests/bot/test_converters.py):
+An example (taken from [`test_converters.py`](/tests/bot/test_converters.py)):
```py
def test_tag_content_converter_for_valid(self):
diff --git a/tests/helpers.py b/tests/helpers.py
index 64fc04afe..18c9866bf 100644
--- a/tests/helpers.py
+++ b/tests/helpers.py
@@ -50,7 +50,7 @@ class HashableMixin(discord.mixins.EqualityComparable):
class ColourMixin:
- """A mixin of Mocks that provides the aliasing of color->colour like discord.py does."""
+ """A mixin for Mocks that provides the aliasing of color->colour like discord.py does."""
@property
def color(self) -> discord.Colour:
@@ -159,14 +159,9 @@ class MockRole(AttributeMock, unittest.mock.Mock, ColourMixin, HashableMixin):
attribute_mocktype = unittest.mock.MagicMock
- def __init__(
- self,
- name: str = "role",
- role_id: int = 1,
- position: int = 1,
- **kwargs,
- ) -> None:
+ def __init__(self, name: str = "role", role_id: int = 1, position: int = 1, **kwargs) -> None:
super().__init__(spec=role_instance, **kwargs)
+
self.name = name
self.id = role_id
self.position = position
@@ -201,11 +196,14 @@ class MockMember(AttributeMock, unittest.mock.Mock, ColourMixin, HashableMixin):
**kwargs,
) -> None:
super().__init__(spec=member_instance, **kwargs)
+
self.name = name
self.id = user_id
+
self.roles = [MockRole("@everyone", 1)]
if roles:
self.roles.extend(roles)
+
self.mention = f"@{self.name}"
self.send = AsyncMock()