Skip to content

Commit c11c6da

Browse files
committed
Convert pubchem_test.py from using unittest to plain pytest
The failures in CI of the tests may be due to the use of the old Pyton unittest framework. This PR avoids the use of `unittest` in that file.
1 parent 5e4855e commit c11c6da

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)