def test_writeHeaders(self, mockWorksheet, mockSubstitutionMatrix):
        mockBase = MagicMock()
        mockWorksheet.cell = MagicMock(spec=openpyxl.cell.cell)
        pValueMock = PropertyMock()
        type(mockWorksheet.cell(row = ANY, column = ANY)) \
            .value = pValueMock

        testSubjectHeader = "Test Header"
        testSubject = "Subject"
        testInvalidSubject = "Invalid Subject"
        testValidSubjects = {testSubject: mockSubstitutionMatrix}
        testInvalidSubjects = [testInvalidSubject]
        mockBase.__iter__.return_value = [1, 2,]

        testWriter = SubstitutionMatrixDataWriter(testSubjectHeader,
            testValidSubjects, testInvalidSubjects, mockBase)
        testWriter._writeHeaders(mockWorksheet)


        self.assertEquals(mockBase.__iter__.call_count, 3,
            "Nucleobase iterator must be called three times.")
        mockWorksheet.cell.assert_any_call(row = 1, column = 1)
        mockWorksheet.cell.assert_any_call(row = 1, column = 2)

        pValueMock.assert_any_call("Virus")
        pValueMock.assert_any_call("1 -> 2")
        pValueMock.assert_any_call("2 -> 1")
    def test_writeSubject(self, mockSubstitutionMatrix, mockWorksheet):
        testSubjectHeader = "Test Header"
        testSubject = "Subject"
        testInvalidSubject = "Invalid Subject"
        testValidSubjects = {testSubject: mockSubstitutionMatrix}
        testInvalidSubjects = [testInvalidSubject]
        testSubjectName = "Test Subject Name"
        mockBase = MagicMock()
        mockBase.__iter__.return_value = [0, 1]
        mockSubstitutionMatrix.getCopy.return_value = [[1, 2], [3, 4]]
        pValueMock = PropertyMock()
        type(mockWorksheet.cell(row = ANY, column = ANY)).value \
            = pValueMock

        testWriter = SubstitutionMatrixDataWriter(testSubjectHeader,
            testValidSubjects, testInvalidSubjects, mockBase)
        testWriter._writeSubject(testSubjectName,
            mockSubstitutionMatrix, mockWorksheet)

        pValueMock.assert_any_call(testSubjectName)
        pValueMock.assert_any_call(2)
        pValueMock.assert_any_call(3)