diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 41abc5a..9e5cb03 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -1,8 +1,12 @@
-from test.test_support import verify, TESTFN
+#! /usr/bin/env python
+"""Test script for the gzip module.
+"""
+
+import unittest
+from test import test_support
 import sys, os
 import gzip
 
-filename = TESTFN
 
 data1 = """  int length=DEFAULTALLOC, err = Z_OK;
   PyObject *RetVal;
@@ -16,75 +20,107 @@
 /* See http://www.winimage.com/zLibDll for Windows */
 """
 
-f = gzip.GzipFile(filename, 'wb') ; f.write(data1 * 50)
 
-# Try flush and fileno.
-f.flush()
-f.fileno()
-if hasattr(os, 'fsync'):
-    os.fsync(f.fileno())
-f.close()
+class TestGzip(unittest.TestCase):
+    filename = test_support.TESTFN
 
-# Try reading.
-f = gzip.GzipFile(filename, 'r') ; d = f.read() ; f.close()
-verify(d == data1*50)
+    def setUp (self):
+        pass
 
-# Append to the previous file
-f = gzip.GzipFile(filename, 'ab') ; f.write(data2 * 15) ; f.close()
+    def tearDown (self):
+        try:
+            os.unlink(self.filename)
+        except os.error:
+            pass
 
-f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
-verify(d == (data1*50) + (data2*15))
 
-# Try .readline() with varying line lengths
+    def test_write (self):
+        f = gzip.GzipFile(self.filename, 'wb') ; f.write(data1 * 50)
 
-f = gzip.GzipFile(filename, 'rb')
-line_length = 0
-while 1:
-    L = f.readline(line_length)
-    if L == "" and line_length != 0: break
-    verify(len(L) <= line_length)
-    line_length = (line_length + 1) % 50
-f.close()
+        # Try flush and fileno.
+        f.flush()
+        f.fileno()
+        if hasattr(os, 'fsync'):
+            os.fsync(f.fileno())
+        f.close()
 
-# Try .readlines()
+    def test_read(self):
+        self.test_write()
+        # Try reading.
+        f = gzip.GzipFile(self.filename, 'r') ; d = f.read() ; f.close()
+        self.assertEqual(d, data1*50)
 
-f = gzip.GzipFile(filename, 'rb')
-L = f.readlines()
-f.close()
+    def test_append(self):
+        self.test_write()
+        # Append to the previous file
+        f = gzip.GzipFile(self.filename, 'ab') ; f.write(data2 * 15) ; f.close()
 
-f = gzip.GzipFile(filename, 'rb')
-while 1:
-    L = f.readlines(150)
-    if L == []: break
-f.close()
+        f = gzip.GzipFile(self.filename, 'rb') ; d = f.read() ; f.close()
+        self.assertEqual(d, (data1*50) + (data2*15))
 
-# Try seek, read test
+    def test_readline(self):
+        self.test_write()
+        # Try .readline() with varying line lengths
 
-f = gzip.GzipFile(filename)
-while 1:
-    oldpos = f.tell()
-    line1 = f.readline()
-    if not line1: break
-    newpos = f.tell()
-    f.seek(oldpos)  # negative seek
-    if len(line1)>10:
-        amount = 10
-    else:
-        amount = len(line1)
-    line2 = f.read(amount)
-    verify(line1[:amount] == line2)
-    f.seek(newpos)  # positive seek
-f.close()
+        f = gzip.GzipFile(self.filename, 'rb')
+        line_length = 0
+        while 1:
+            L = f.readline(line_length)
+            if L == "" and line_length != 0: break
+            self.assert_(len(L) <= line_length)
+            line_length = (line_length + 1) % 50
+        f.close()
 
-# Try seek, write test
-f = gzip.GzipFile(filename, 'w')
-for pos in range(0, 256, 16):
-    f.seek(pos)
-    f.write('GZ\n')
-f.close()
+    def test_readlines(self):
+        self.test_write()
+        # Try .readlines()
 
-f = gzip.GzipFile(filename, 'r')
-verify(f.myfileobj.mode == 'rb')
-f.close()
+        f = gzip.GzipFile(self.filename, 'rb')
+        L = f.readlines()
+        f.close()
 
-os.unlink(filename)
+        f = gzip.GzipFile(self.filename, 'rb')
+        while 1:
+            L = f.readlines(150)
+            if L == []: break
+        f.close()
+
+    def test_seek_read(self):
+        self.test_write()
+        # Try seek, read test
+
+        f = gzip.GzipFile(self.filename)
+        while 1:
+            oldpos = f.tell()
+            line1 = f.readline()
+            if not line1: break
+            newpos = f.tell()
+            f.seek(oldpos)  # negative seek
+            if len(line1)>10:
+                amount = 10
+            else:
+                amount = len(line1)
+            line2 = f.read(amount)
+            self.assertEqual(line1[:amount], line2)
+            f.seek(newpos)  # positive seek
+        f.close()
+
+    def test_seek_write(self):
+        # Try seek, write test
+        f = gzip.GzipFile(self.filename, 'w')
+        for pos in range(0, 256, 16):
+            f.seek(pos)
+            f.write('GZ\n')
+        f.close()
+
+    def test_mode(self):
+        self.test_write()
+        f = gzip.GzipFile(self.filename, 'r')
+        self.assertEqual(f.myfileobj.mode, 'rb')
+        f.close()
+
+def test_main(verbose=None):
+    test_support.run_unittest(TestGzip)
+
+if __name__ == "__main__":
+    test_main(verbose=True)
