diff --git a/Lib/test/output/test_linuxaudiodev b/Lib/test/output/test_linuxaudiodev
deleted file mode 100644
index 3e8c691..0000000
--- a/Lib/test/output/test_linuxaudiodev
+++ /dev/null
@@ -1,7 +0,0 @@
-test_linuxaudiodev
-expected rate >= 0, not -1
-expected sample size >= 0, not -2
-nchannels must be 1 or 2, not 3
-unknown audio encoding: 177
-for linear unsigned 16-bit little-endian audio, expected sample size 16, not 8
-for linear unsigned 8-bit audio, expected sample size 8, not 16
diff --git a/Lib/test/test_linuxaudiodev.py b/Lib/test/test_linuxaudiodev.py
index fe902b5..d884cf8 100644
--- a/Lib/test/test_linuxaudiodev.py
+++ b/Lib/test/test_linuxaudiodev.py
@@ -1,7 +1,7 @@
 from test import test_support
 test_support.requires('audio')
 
-from test.test_support import verbose, findfile, TestFailed, TestSkipped
+from test.test_support import findfile, TestSkipped, run_unittest
 
 import errno
 import fcntl
@@ -12,81 +12,91 @@
 import sunaudio
 import time
 import audioop
+import unittest
 
 SND_FORMAT_MULAW_8 = 1
 
-def play_sound_file(path):
-    fp = open(path, 'r')
-    size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
-    data = fp.read()
-    fp.close()
+class LinuxAudioDevTests(unittest.TestCase):
 
-    if enc != SND_FORMAT_MULAW_8:
-        print "Expect .au file with 8-bit mu-law samples"
-        return
+    def setUp(self):
+        self.dev = linuxaudiodev.open('w')
 
+    def tearDown(self):
+        self.dev.close()
+
+    def test_methods(self):
+        # at least check that these methods can be invoked
+        self.dev.bufsize()
+        self.dev.obufcount()
+        self.dev.obuffree()
+        self.dev.getptr()
+        self.dev.fileno()
+
+    def test_play_sound_file(self):
+        path = findfile("audiotest.au")
+        fp = open(path, 'r')
+        size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
+        data = fp.read()
+        fp.close()
+
+        if enc != SND_FORMAT_MULAW_8:
+            self.fail("Expect .au file with 8-bit mu-law samples")
+
+        # convert the data to 16-bit signed
+        data = audioop.ulaw2lin(data, 2)
+
+        # set the data format
+        if sys.byteorder == 'little':
+            fmt = linuxaudiodev.AFMT_S16_LE
+        else:
+            fmt = linuxaudiodev.AFMT_S16_BE
+
+        # set parameters based on .au file headers
+        self.dev.setparameters(rate, 16, nchannels, fmt)
+        self.dev.write(data)
+        self.dev.flush()
+
+    def test_errors(self):
+        size = 8
+        fmt = linuxaudiodev.AFMT_U8
+        rate = 8000
+        nchannels = 1
+        try:
+            self.dev.setparameters(-1, size, nchannels, fmt)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "expected rate >= 0, not -1")
+        try:
+            self.dev.setparameters(rate, -2, nchannels, fmt)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "expected sample size >= 0, not -2")
+        try:
+            self.dev.setparameters(rate, size, 3, fmt)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "nchannels must be 1 or 2, not 3")
+        try:
+            self.dev.setparameters(rate, size, nchannels, 177)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "unknown audio encoding: 177")
+        try:
+            self.dev.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "for linear unsigned 16-bit little-endian "
+                              "audio, expected sample size 16, not 8")
+        try:
+            self.dev.setparameters(rate, 16, nchannels, fmt)
+        except ValueError, err:
+            self.assertEquals(err.args[0], "for linear unsigned 8-bit audio, expected "
+                              "sample size 8, not 16")
+
+def test_main():
     try:
-        a = linuxaudiodev.open('w')
-    except linuxaudiodev.error, msg:
-        if msg[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY):
-            raise TestSkipped, msg
-        raise TestFailed, msg
+        dsp = linuxaudiodev.open('w')
+    except IOError, msg:
+        if msg.args[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY):
+            raise TestSkipped(msg)
+        raise
+    dsp.close()
+    run_unittest(LinuxAudioDevTests)
 
-    # convert the data to 16-bit signed
-    data = audioop.ulaw2lin(data, 2)
-
-    # set the data format
-    if sys.byteorder == 'little':
-        fmt = linuxaudiodev.AFMT_S16_LE
-    else:
-        fmt = linuxaudiodev.AFMT_S16_BE
-
-    # at least check that these methods can be invoked
-    a.bufsize()
-    a.obufcount()
-    a.obuffree()
-    a.getptr()
-    a.fileno()
-
-    # set parameters based on .au file headers
-    a.setparameters(rate, 16, nchannels, fmt)
-    a.write(data)
-    a.flush()
-    a.close()
-
-def test_errors():
-    a = linuxaudiodev.open("w")
-    size = 8
-    fmt = linuxaudiodev.AFMT_U8
-    rate = 8000
-    nchannels = 1
-    try:
-        a.setparameters(-1, size, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, -2, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, 3, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, nchannels, 177)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, 16, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-
-def test():
-    play_sound_file(findfile('audiotest.au'))
-    test_errors()
-
-test()
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_ossaudiodev.py b/Lib/test/test_ossaudiodev.py
index 3fb5d6d..5a6c893 100644
--- a/Lib/test/test_ossaudiodev.py
+++ b/Lib/test/test_ossaudiodev.py
@@ -166,8 +166,7 @@
         if msg[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY):
             raise TestSkipped(msg)
         raise
-    finally:
-        dsp.close()
+    dsp.close()
     test_support.run_unittest(__name__)
 
 if __name__ == "__main__":
