Skip to content

Commit 0ec18cc

Browse files
authored
Convert pubchem_test.py to use plain pytest instead of unittest (#1278)
The failures in CI of the tests may be due to the use of the old Python unittest framework. This PR avoids the use of `unittest` in that file.
1 parent 5e4855e commit 0ec18cc

1 file changed

Lines changed: 31 additions & 34 deletions

File tree

src/openfermion/chem/pubchem_test.py

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212

1313
"""Tests for pubchem.py."""
1414

15-
import unittest
16-
from unittest.mock import patch
17-
1815
import numpy
1916
import pytest
2017
import pubchempy
@@ -79,24 +76,24 @@ def mock_get_compounds(name, searchtype, record_type='2d'):
7976

8077

8178
@using_pubchempy
82-
class OpenFermionPubChemTest(unittest.TestCase):
79+
class TestOpenFermionPubChem:
8380

84-
@patch('pubchempy.get_compounds', mock_get_compounds)
85-
def test_water(self):
81+
def test_water(self, monkeypatch):
82+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
8683
water_geometry = geometry_from_pubchem('water')
87-
self.water_natoms = len(water_geometry)
88-
self.water_atoms = [water_atom[0] for water_atom in water_geometry]
89-
water_oxygen_index = self.water_atoms.index('O')
84+
water_natoms_actual = len(water_geometry)
85+
water_atoms = [water_atom[0] for water_atom in water_geometry]
86+
water_oxygen_index = water_atoms.index('O')
9087
water_oxygen = water_geometry.pop(water_oxygen_index)
9188
water_oxygen_coordinate = numpy.array(water_oxygen[1])
9289
water_hydrogen1_coordinate = numpy.array(water_geometry[0][1])
9390
water_hydrogen2_coordinate = numpy.array(water_geometry[1][1])
9491
water_oxygen_hydrogen1 = water_hydrogen1_coordinate - water_oxygen_coordinate
9592
water_oxygen_hydrogen2 = water_hydrogen2_coordinate - water_oxygen_coordinate
9693

97-
self.water_bond_length_1 = numpy.linalg.norm(water_oxygen_hydrogen1)
98-
self.water_bond_length_2 = numpy.linalg.norm(water_oxygen_hydrogen2)
99-
self.water_bond_angle = numpy.arccos(
94+
water_bond_length_1 = numpy.linalg.norm(water_oxygen_hydrogen1)
95+
water_bond_length_2 = numpy.linalg.norm(water_oxygen_hydrogen2)
96+
water_bond_angle = numpy.arccos(
10097
numpy.dot(
10198
water_oxygen_hydrogen1,
10299
water_oxygen_hydrogen2
@@ -108,51 +105,51 @@ def test_water(self):
108105
)
109106

110107
water_natoms = 3
111-
self.assertEqual(water_natoms, self.water_natoms)
108+
assert water_natoms == water_natoms_actual
112109

113-
self.assertAlmostEqual(self.water_bond_length_1, self.water_bond_length_2, places=4)
110+
assert water_bond_length_1 == pytest.approx(water_bond_length_2, abs=1e-4)
114111
water_bond_length_low = 0.9
115112
water_bond_length_high = 1.1
116-
self.assertTrue(water_bond_length_low <= self.water_bond_length_1)
117-
self.assertTrue(water_bond_length_high >= self.water_bond_length_1)
113+
assert water_bond_length_low <= water_bond_length_1
114+
assert water_bond_length_high >= water_bond_length_1
118115

119116
water_bond_angle_low = 100.0 / 360 * 2 * numpy.pi
120117
water_bond_angle_high = 110.0 / 360 * 2 * numpy.pi
121-
self.assertTrue(water_bond_angle_low <= self.water_bond_angle)
122-
self.assertTrue(water_bond_angle_high >= self.water_bond_angle)
118+
assert water_bond_angle_low <= water_bond_angle
119+
assert water_bond_angle_high >= water_bond_angle
123120

124-
@patch('pubchempy.get_compounds', mock_get_compounds)
125-
def test_helium(self):
121+
def test_helium(self, monkeypatch):
122+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
126123
helium_geometry = geometry_from_pubchem('helium')
127-
self.helium_natoms = len(helium_geometry)
124+
helium_natoms_actual = len(helium_geometry)
128125

129126
helium_natoms = 1
130-
self.assertEqual(helium_natoms, self.helium_natoms)
127+
assert helium_natoms == helium_natoms_actual
131128

132-
@patch('pubchempy.get_compounds', mock_get_compounds)
133-
def test_none(self):
129+
def test_none(self, monkeypatch):
130+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
134131
none_geometry = geometry_from_pubchem('none')
135132

136-
self.assertIsNone(none_geometry)
133+
assert none_geometry is None
137134

138-
@patch('pubchempy.get_compounds', mock_get_compounds)
139-
def test_water_2d(self):
135+
def test_water_2d(self, monkeypatch):
136+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
140137
water_geometry = geometry_from_pubchem('water', structure='2d')
141-
self.water_natoms = len(water_geometry)
138+
water_natoms_actual = len(water_geometry)
142139

143140
water_natoms = 3
144-
self.assertEqual(water_natoms, self.water_natoms)
141+
assert water_natoms == water_natoms_actual
145142

146-
self.oxygen_z_1 = water_geometry[0][1][2]
147-
self.oxygen_z_2 = water_geometry[1][1][2]
143+
oxygen_z_1 = water_geometry[0][1][2]
144+
oxygen_z_2 = water_geometry[1][1][2]
148145
z = 0
149-
self.assertEqual(z, self.oxygen_z_1)
150-
self.assertEqual(z, self.oxygen_z_2)
146+
assert z == oxygen_z_1
147+
assert z == oxygen_z_2
151148

152149
with pytest.raises(ValueError, match='Incorrect value for the argument structure'):
153150
_ = geometry_from_pubchem('water', structure='foo')
154151

155152
@pytest.mark.flaky(retries=3, delay=2, only_on=[pubchempy.ServerBusyError])
156153
def test_geometry_from_pubchem_live_api(self):
157154
water_geometry = geometry_from_pubchem('water')
158-
self.assertEqual(len(water_geometry), 3)
155+
assert len(water_geometry) == 3

0 commit comments

Comments
 (0)