From b182334575293c7603e0e90fac729a1b7215753c Mon Sep 17 00:00:00 2001
From: Ken Dreyer <kdreyer@redhat.com>
Date: Mon, 2 Aug 2021 14:30:44 -0400
Subject: [PATCH] switch from nose to pytest

Nose is deprecated. Use pytest for the test suite instead.
---
 setup.py                                      |   2 -
 tests/test_functional/test_explicit_use.py    |  39 +-
 tests/test_functional/test_generation.py      | 449 ++++++------
 tests/test_functional/test_middleware.py      |  11 +-
 tests/test_functional/test_nonminimization.py |  95 ++-
 tests/test_functional/test_recognition.py     | 675 ++++++++---------
 tests/test_functional/test_resources.py       | 218 +++---
 tests/test_functional/test_submapper.py       | 148 ++--
 tests/test_functional/test_utils.py           | 692 ++++++++++--------
 11 files changed, 1167 insertions(+), 1182 deletions(-)

diff --git a/setup.py b/setup.py
index 18d886f..7db95e7 100644
--- a/setup.py
+++ b/setup.py
@@ -62,10 +62,8 @@
           'GitHub: repo': 'https://github.com/bbangert/routes',
       },
       license="MIT",
-      test_suite="nose.collector",
       include_package_data=True,
       zip_safe=False,
-      tests_require=["soupsieve<2.0", 'nose', 'webtest', 'webob', 'coverage'],
       install_requires=[
           "six",
           "repoze.lru>=0.3"
diff --git a/tests/test_functional/test_explicit_use.py b/tests/test_functional/test_explicit_use.py
index b1e1cd7..5232142 100644
--- a/tests/test_functional/test_explicit_use.py
+++ b/tests/test_functional/test_explicit_use.py
@@ -1,7 +1,7 @@
 """test_explicit_use"""
 import os, sys, time, unittest
-from nose.tools import eq_, assert_raises, assert_is_none
 
+import pytest
 from routes import *
 from routes.route import Route
 from routes.util import GenerationException
@@ -17,7 +17,7 @@ def test_route_dict_use(self):
         env = environ.copy()
         env['PATH_INFO'] = '/hi/george'
 
-        eq_({'fred': 'george'}, m.match(environ=env))
+        assert m.match(environ=env) == {'fred': 'george'}
 
     def test_x_forwarded(self):
         m = Mapper()
@@ -26,7 +26,7 @@ def test_x_forwarded(self):
 
         environ = {'HTTP_X_FORWARDED_HOST': 'localhost'}
         url = URLGenerator(m, environ)
-        eq_('http://localhost/hi/smith', url(fred='smith', qualified=True))
+        assert url(fred='smith', qualified=True) == 'http://localhost/hi/smith'
 
     def test_server_port(self):
         m = Mapper()
@@ -36,7 +36,7 @@ def test_server_port(self):
         environ = {'SERVER_NAME': 'localhost', 'wsgi.url_scheme': 'https',
                    'SERVER_PORT': '993'}
         url = URLGenerator(m, environ)
-        eq_('https://localhost:993/hi/smith', url(fred='smith', qualified=True))
+        assert url(fred='smith', qualified=True) == 'https://localhost:993/hi/smith'
 
     def test_subdomain_screen(self):
         m = Mapper()
@@ -46,22 +46,23 @@ def test_subdomain_screen(self):
 
         environ = {'HTTP_HOST': 'localhost.com'}
         url = URLGenerator(m, environ)
-        eq_('http://home.localhost.com/hi/smith', url(fred='smith', sub_domain=u'home', qualified=True))
+        assert url(fred='smith', sub_domain=u'home', qualified=True) == 'http://home.localhost.com/hi/smith'
 
         environ = {'HTTP_HOST': 'here.localhost.com', 'PATH_INFO': '/hi/smith'}
         url = URLGenerator(m, environ.copy())
-        assert_raises(GenerationException, lambda: url.current(qualified=True))
+        with pytest.raises(GenerationException):
+            url.current(qualified=True)
 
         environ = {'HTTP_HOST': 'subdomain.localhost.com'}
         url = URLGenerator(m, environ.copy())
-        eq_('http://sub.localhost.com/hi/smith', url(fred='smith', sub_domain='sub', qualified=True))
+        assert url(fred='smith', sub_domain='sub', qualified=True) == 'http://sub.localhost.com/hi/smith'
 
         environ = {'HTTP_HOST': 'sub.sub.localhost.com'}
         url = URLGenerator(m, environ.copy())
-        eq_('http://new.localhost.com/hi/smith', url(fred='smith', sub_domain='new', qualified=True))
+        assert url(fred='smith', sub_domain='new', qualified=True) == 'http://new.localhost.com/hi/smith'
 
         url = URLGenerator(m, {})
-        eq_('/hi/smith', url(fred='smith', sub_domain=u'home'))
+        assert url(fred='smith', sub_domain=u'home') == '/hi/smith'
 
     def test_anchor(self):
         m = Mapper()
@@ -70,7 +71,7 @@ def test_anchor(self):
 
         environ = {'HTTP_HOST': 'localhost.com'}
         url = URLGenerator(m, environ)
-        eq_('/hi/smith#here', url(fred='smith', anchor='here'))
+        assert url(fred='smith', anchor='here') == '/hi/smith#here'
 
     def test_static_args(self):
         m = Mapper()
@@ -79,7 +80,7 @@ def test_static_args(self):
 
         url = URLGenerator(m, {})
 
-        eq_('/here?q=fred&q=here%20now', url('/here', q=[u'fred', 'here now']))
+        assert url('/here', q=[u'fred', 'here now']) == '/here?q=fred&q=here%20now'
 
     def test_current(self):
         m = Mapper()
@@ -90,7 +91,7 @@ def test_current(self):
         match = m.routematch(environ=environ)[0]
         environ['wsgiorg.routing_args'] = (None, match)
         url = URLGenerator(m, environ)
-        eq_('/hi/smith', url.current())
+        assert url.current() == '/hi/smith'
 
     def test_add_routes(self):
         map = Mapper(explicit=True)
@@ -99,7 +100,7 @@ def test_add_routes(self):
             Route('foo', '/foo',)
         ]
         map.extend(routes)
-        eq_(map.match('/foo'), {})
+        assert map.match('/foo') == {}
 
     def test_add_routes_conditions_unmet(self):
         map = Mapper(explicit=True)
@@ -113,7 +114,7 @@ def test_add_routes_conditions_unmet(self):
             'REQUEST_METHOD': 'GET',
         }
         map.extend(routes)
-        assert_is_none(map.match('/foo', environ=environ))
+        assert map.match('/foo', environ=environ) is None
 
     def test_add_routes_conditions_met(self):
         map = Mapper(explicit=True)
@@ -127,7 +128,7 @@ def test_add_routes_conditions_met(self):
             'REQUEST_METHOD': 'POST',
         }
         map.extend(routes)
-        eq_(map.match('/foo', environ=environ), {})
+        assert map.match('/foo', environ=environ) == {}
 
     def test_using_func(self):
         def fred(view):
@@ -141,7 +142,7 @@ def fred(view):
         match = m.routematch(environ=environ)[0]
         environ['wsgiorg.routing_args'] = (None, match)
         url = URLGenerator(m, environ)
-        eq_('/hi/smith', url.current())
+        assert url.current() == '/hi/smith'
 
     def test_using_prefix(self):
         m = Mapper()
@@ -154,8 +155,8 @@ def test_using_prefix(self):
         environ['wsgiorg.routing_args'] = (None, match)
         url = URLGenerator(m, environ)
 
-        eq_('/jones/content/index', url.current())
-        eq_('/jones/smith/barney', url(first='smith', last='barney'))
+        assert url.current() == '/jones/content/index'
+        assert url(first='smith', last='barney') == '/jones/smith/barney'
 
     def test_with_host_param(self):
         m = Mapper()
@@ -164,4 +165,4 @@ def test_with_host_param(self):
 
         environ = {'HTTP_HOST': 'localhost.com'}
         url = URLGenerator(m, environ)
-        eq_('/hi/smith?host=here', url(fred='smith', host_='here'))
+        assert url(fred='smith', host_='here') == '/hi/smith?host=here'
diff --git a/tests/test_functional/test_generation.py b/tests/test_functional/test_generation.py
index b461b5f..ff9effd 100644
--- a/tests/test_functional/test_generation.py
+++ b/tests/test_functional/test_generation.py
@@ -2,7 +2,6 @@
 import sys, time, unittest
 from six.moves import urllib
 
-from nose.tools import eq_, assert_raises
 from routes import *
 
 class TestGeneration(unittest.TestCase):
@@ -11,17 +10,17 @@ def test_all_static_no_reqs(self):
         m = Mapper()
         m.connect('hello/world')
 
-        eq_('/hello/world', m.generate())
+        assert m.generate() == '/hello/world'
 
     def test_basic_dynamic(self):
         for path in ['hi/:fred', 'hi/:(fred)']:
             m = Mapper()
             m.connect(path)
 
-            eq_('/hi/index', m.generate(fred='index'))
-            eq_('/hi/show', m.generate(fred='show'))
-            eq_('/hi/list%20people', m.generate(fred='list people'))
-            eq_(None, m.generate())
+            assert m.generate(fred='index') == '/hi/index'
+            assert m.generate(fred='show') == '/hi/show'
+            assert m.generate(fred='list people') == '/hi/list%20people'
+            assert m.generate() is None
 
     def test_relative_url(self):
         m = Mapper(explicit=False)
@@ -31,17 +30,17 @@ def test_relative_url(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('about', url('about'))
-        eq_('http://localhost/about', url('about', qualified=True))
+        assert url('about') == 'about'
+        assert url('about', qualified=True) == 'http://localhost/about'
 
     def test_basic_dynamic_explicit_use(self):
         m = Mapper()
         m.connect('hi/{fred}')
         url = URLGenerator(m, {})
 
-        eq_('/hi/index', url(fred='index'))
-        eq_('/hi/show', url(fred='show'))
-        eq_('/hi/list%20people', url(fred='list people'))
+        assert url(fred='index') == '/hi/index'
+        assert url(fred='show') == '/hi/show'
+        assert url(fred='list people') == '/hi/list%20people'
 
     def test_dynamic_with_default(self):
         for path in ['hi/:action', 'hi/:(action)']:
@@ -49,10 +48,10 @@ def test_dynamic_with_default(self):
             m.minimization = True
             m.connect(path)
 
-            eq_('/hi', m.generate(action='index'))
-            eq_('/hi/show', m.generate(action='show'))
-            eq_('/hi/list%20people', m.generate(action='list people'))
-            eq_('/hi', m.generate())
+            assert m.generate(action='index') == '/hi'
+            assert m.generate(action='show') == '/hi/show'
+            assert m.generate(action='list people') == '/hi/list%20people'
+            assert m.generate() == '/hi'
 
     def test_dynamic_with_false_equivs(self):
         m = Mapper(explicit=False)
@@ -60,26 +59,26 @@ def test_dynamic_with_false_equivs(self):
         m.connect('article/:page', page=False)
         m.connect(':controller/:action/:id')
 
-        eq_('/blog/view/0', m.generate(controller="blog", action="view", id="0"))
-        eq_('/blog/view/0', m.generate(controller="blog", action="view", id=0))
-        eq_('/blog/view/False', m.generate(controller="blog", action="view", id=False))
-        eq_('/blog/view/False', m.generate(controller="blog", action="view", id='False'))
-        eq_('/blog/view', m.generate(controller="blog", action="view", id=None))
-        eq_('/blog/view', m.generate(controller="blog", action="view", id='None'))
-        eq_('/article', m.generate(page=None))
+        assert m.generate(controller="blog", action="view", id="0") == '/blog/view/0'
+        assert m.generate(controller="blog", action="view", id=0) == '/blog/view/0'
+        assert m.generate(controller="blog", action="view", id=False) == '/blog/view/False'
+        assert m.generate(controller="blog", action="view", id='False') == '/blog/view/False'
+        assert m.generate(controller="blog", action="view", id=None) == '/blog/view'
+        assert m.generate(controller="blog", action="view", id='None') == '/blog/view'
+        assert m.generate(page=None) == '/article'
 
         m = Mapper()
         m.minimization = True
         m.connect('view/:home/:area', home="austere", area=None)
 
-        eq_('/view/sumatra', m.generate(home='sumatra'))
-        eq_('/view/austere/chicago', m.generate(area='chicago'))
+        assert m.generate(home='sumatra') == '/view/sumatra'
+        assert m.generate(area='chicago') == '/view/austere/chicago'
 
         m = Mapper()
         m.minimization = True
         m.connect('view/:home/:area', home=None, area=None)
 
-        eq_('/view/None/chicago', m.generate(home=None, area='chicago'))
+        assert m.generate(home=None, area='chicago') == '/view/None/chicago'
 
     def test_dynamic_with_underscore_parts(self):
         m = Mapper(explicit=False)
@@ -87,11 +86,11 @@ def test_dynamic_with_underscore_parts(self):
         m.connect('article/:small_page', small_page=False)
         m.connect(':(controller)/:(action)/:(id)')
 
-        eq_('/blog/view/0', m.generate(controller="blog", action="view", id="0"))
-        eq_('/blog/view/False', m.generate(controller="blog", action="view", id='False'))
-        eq_('/blog/view', m.generate(controller="blog", action="view", id='None'))
-        eq_('/article', m.generate(small_page=None))
-        eq_('/article/hobbes', m.generate(small_page='hobbes'))
+        assert m.generate(controller="blog", action="view", id="0") == '/blog/view/0'
+        assert m.generate(controller="blog", action="view", id='False') == '/blog/view/False'
+        assert m.generate(controller="blog", action="view", id='None') == '/blog/view'
+        assert m.generate(small_page=None) == '/article'
+        assert m.generate(small_page='hobbes') == '/article/hobbes'
 
     def test_dynamic_with_false_equivs_and_splits(self):
         m = Mapper(explicit=False)
@@ -99,37 +98,37 @@ def test_dynamic_with_false_equivs_and_splits(self):
         m.connect('article/:(page)', page=False)
         m.connect(':(controller)/:(action)/:(id)')
 
-        eq_('/blog/view/0', m.generate(controller="blog", action="view", id="0"))
-        eq_('/blog/view/0', m.generate(controller="blog", action="view", id=0))
-        eq_('/blog/view/False', m.generate(controller="blog", action="view", id=False))
-        eq_('/blog/view/False', m.generate(controller="blog", action="view", id='False'))
-        eq_('/blog/view', m.generate(controller="blog", action="view", id=None))
-        eq_('/blog/view', m.generate(controller="blog", action="view", id='None'))
-        eq_('/article', m.generate(page=None))
+        assert m.generate(controller="blog", action="view", id="0") == '/blog/view/0'
+        assert m.generate(controller="blog", action="view", id=0) == '/blog/view/0'
+        assert m.generate(controller="blog", action="view", id=False) == '/blog/view/False'
+        assert m.generate(controller="blog", action="view", id='False') == '/blog/view/False'
+        assert m.generate(controller="blog", action="view", id=None) == '/blog/view'
+        assert m.generate(controller="blog", action="view", id='None') == '/blog/view'
+        assert m.generate(page=None) == '/article'
 
         m = Mapper()
         m.minimization = True
         m.connect('view/:(home)/:(area)', home="austere", area=None)
 
-        eq_('/view/sumatra', m.generate(home='sumatra'))
-        eq_('/view/austere/chicago', m.generate(area='chicago'))
+        assert m.generate(home='sumatra') == '/view/sumatra'
+        assert m.generate(area='chicago') == '/view/austere/chicago'
 
         m = Mapper()
         m.minimization = True
         m.connect('view/:(home)/:(area)', home=None, area=None)
 
-        eq_('/view/None/chicago', m.generate(home=None, area='chicago'))
+        assert m.generate(home=None, area='chicago') == '/view/None/chicago'
 
     def test_dynamic_with_regexp_condition(self):
         for path in ['hi/:name', 'hi/:(name)']:
             m = Mapper()
             m.connect(path, requirements = {'name':'[a-z]+'})
 
-            eq_('/hi/index', m.generate(name='index'))
-            eq_(None, m.generate(name='fox5'))
-            eq_(None, m.generate(name='something_is_up'))
-            eq_('/hi/abunchofcharacter', m.generate(name='abunchofcharacter'))
-            eq_(None, m.generate())
+            assert m.generate(name='index') == '/hi/index'
+            assert m.generate(name='fox5') is None
+            assert m.generate(name='something_is_up') is None
+            assert m.generate(name='abunchofcharacter') == '/hi/abunchofcharacter'
+            assert m.generate() is None
 
     def test_dynamic_with_default_and_regexp_condition(self):
         for path in ['hi/:action', 'hi/:(action)']:
@@ -137,12 +136,12 @@ def test_dynamic_with_default_and_regexp_condition(self):
             m.minimization = True
             m.connect(path, requirements = {'action':'[a-z]+'})
 
-            eq_('/hi', m.generate(action='index'))
-            eq_(None, m.generate(action='fox5'))
-            eq_(None, m.generate(action='something_is_up'))
-            eq_(None, m.generate(action='list people'))
-            eq_('/hi/abunchofcharacter', m.generate(action='abunchofcharacter'))
-            eq_('/hi', m.generate())
+            assert m.generate(action='index') == '/hi'
+            assert m.generate(action='fox5') is None
+            assert m.generate(action='something_is_up') is None
+            assert m.generate(action='list people') is None
+            assert m.generate(action='abunchofcharacter') == '/hi/abunchofcharacter'
+            assert m.generate() == '/hi'
 
     def test_path(self):
         for path in ['hi/*file', 'hi/*(file)']:
@@ -150,10 +149,10 @@ def test_path(self):
             m.minimization = True
             m.connect(path)
 
-            eq_('/hi', m.generate(file=None))
-            eq_('/hi/books/learning_python.pdf', m.generate(file='books/learning_python.pdf'))
-            eq_('/hi/books/development%26whatever/learning_python.pdf',
-                m.generate(file='books/development&whatever/learning_python.pdf'))
+            assert m.generate(file=None) == '/hi'
+            assert m.generate(file='books/learning_python.pdf') == '/hi/books/learning_python.pdf'
+            assert m.generate(file='books/development&whatever/learning_python.pdf') == \
+                '/hi/books/development%26whatever/learning_python.pdf'
 
     def test_path_backwards(self):
         for path in ['*file/hi', '*(file)/hi']:
@@ -161,18 +160,18 @@ def test_path_backwards(self):
             m.minimization = True
             m.connect(path)
 
-            eq_('/hi', m.generate(file=None))
-            eq_('/books/learning_python.pdf/hi', m.generate(file='books/learning_python.pdf'))
-            eq_('/books/development%26whatever/learning_python.pdf/hi',
-                m.generate(file='books/development&whatever/learning_python.pdf'))
+            assert m.generate(file=None) == '/hi'
+            assert m.generate(file='books/learning_python.pdf') == '/books/learning_python.pdf/hi'
+            assert m.generate(file='books/development&whatever/learning_python.pdf') == \
+                '/books/development%26whatever/learning_python.pdf/hi'
 
     def test_controller(self):
         for path in ['hi/:controller', 'hi/:(controller)']:
             m = Mapper()
             m.connect(path)
 
-            eq_('/hi/content', m.generate(controller='content'))
-            eq_('/hi/admin/user', m.generate(controller='admin/user'))
+            assert m.generate(controller='content') == '/hi/content'
+            assert m.generate(controller='admin/user') == '/hi/admin/user'
 
     def test_controller_with_static(self):
         for path in ['hi/:controller', 'hi/:(controller)']:
@@ -180,9 +179,9 @@ def test_controller_with_static(self):
             m.connect(path)
             m.connect('google', 'http://www.google.com', _static=True)
 
-            eq_('/hi/content', m.generate(controller='content'))
-            eq_('/hi/admin/user', m.generate(controller='admin/user'))
-            eq_('http://www.google.com', url_for('google'))
+            assert m.generate(controller='content') == '/hi/content'
+            assert m.generate(controller='admin/user') == '/hi/admin/user'
+            assert url_for('google') == 'http://www.google.com'
 
     def test_standard_route(self):
         for path in [':controller/:action/:id', ':(controller)/:(action)/:(id)']:
@@ -190,13 +189,13 @@ def test_standard_route(self):
             m.minimization = True
             m.connect(path)
 
-            eq_('/content', m.generate(controller='content', action='index'))
-            eq_('/content/list', m.generate(controller='content', action='list'))
-            eq_('/content/show/10', m.generate(controller='content', action='show', id ='10'))
+            '/content', m.generate(controller='content', action='index')
+            '/content/list', m.generate(controller='content', action='list')
+            '/content/show/10', m.generate(controller='content', action='show', id ='10')
 
-            eq_('/admin/user', m.generate(controller='admin/user', action='index'))
-            eq_('/admin/user/list', m.generate(controller='admin/user', action='list'))
-            eq_('/admin/user/show/10', m.generate(controller='admin/user', action='show', id='10'))
+            '/admin/user', m.generate(controller='admin/user', action='index')
+            '/admin/user/list', m.generate(controller='admin/user', action='list')
+            '/admin/user/show/10', m.generate(controller='admin/user', action='show', id='10')
 
     def test_multiroute(self):
         m = Mapper(explicit=False)
@@ -208,10 +207,10 @@ def test_multiroute(self):
 
         url = m.generate(controller='blog', action='view', year=2004, month='blah')
         assert url == '/blog/view?year=2004&month=blah' or url == '/blog/view?month=blah&year=2004'
-        eq_('/archive/2004/11', m.generate(controller='blog', action='view', year=2004, month=11))
-        eq_('/archive/2004/11', m.generate(controller='blog', action='view', year=2004, month='11'))
-        eq_('/archive/2004', m.generate(controller='blog', action='view', year=2004))
-        eq_('/viewpost/3', m.generate(controller='post', action='view', id=3))
+        assert m.generate(controller='blog', action='view', year=2004, month=11) == '/archive/2004/11'
+        assert m.generate(controller='blog', action='view', year=2004, month='11') == '/archive/2004/11'
+        assert m.generate(controller='blog', action='view', year=2004) == '/archive/2004'
+        assert m.generate(controller='post', action='view', id=3) == '/viewpost/3'
 
     def test_multiroute_with_splits(self):
         m = Mapper(explicit=False)
@@ -223,10 +222,10 @@ def test_multiroute_with_splits(self):
 
         url = m.generate(controller='blog', action='view', year=2004, month='blah')
         assert url == '/blog/view?year=2004&month=blah' or url == '/blog/view?month=blah&year=2004'
-        eq_('/archive/2004/11', m.generate(controller='blog', action='view', year=2004, month=11))
-        eq_('/archive/2004/11', m.generate(controller='blog', action='view', year=2004, month='11'))
-        eq_('/archive/2004', m.generate(controller='blog', action='view', year=2004))
-        eq_('/viewpost/3', m.generate(controller='post', action='view', id=3))
+        assert m.generate(controller='blog', action='view', year=2004, month=11) == '/archive/2004/11'
+        assert m.generate(controller='blog', action='view', year=2004, month='11') == '/archive/2004/11'
+        assert m.generate(controller='blog', action='view', year=2004) == '/archive/2004'
+        assert m.generate(controller='post', action='view', id=3) == '/viewpost/3'
 
     def test_big_multiroute(self):
         m = Mapper(explicit=False)
@@ -251,25 +250,21 @@ def test_big_multiroute(self):
         m.connect('pages/*name', controller='articles', action='view_page')
 
 
-        eq_('/pages/the/idiot/has/spoken',
-            m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken'))
-        eq_('/', m.generate(controller='articles', action='index'))
-        eq_('/xml/articlerss/4/feed.xml', m.generate(controller='xml', action='articlerss', id=4))
-        eq_('/xml/rss/feed.xml', m.generate(controller='xml', action='rss'))
-        eq_('/admin/comments/article/4/view/2',
-            m.generate(controller='admin/comments', action='view', article_id=4, id=2))
-        eq_('/admin', m.generate(controller='admin/general'))
-        eq_('/admin/comments/article/4/index', m.generate(controller='admin/comments', article_id=4))
-        eq_('/admin/comments/article/4',
-            m.generate(controller='admin/comments', action=None, article_id=4))
-        eq_('/articles/2004/2/20/page/1',
-            m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1))
-        eq_('/articles/category', m.generate(controller='articles', action='category'))
-        eq_('/xml/index/feed.xml', m.generate(controller='xml'))
-        eq_('/xml/articlerss/feed.xml', m.generate(controller='xml', action='articlerss'))
-
-        eq_(None, m.generate(controller='admin/comments', id=2))
-        eq_(None, m.generate(controller='articles', action='find_by_date', year=2004))
+        assert m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken') == '/pages/the/idiot/has/spoken'
+        assert m.generate(controller='articles', action='index') == '/'
+        assert m.generate(controller='xml', action='articlerss', id=4) == '/xml/articlerss/4/feed.xml'
+        assert m.generate(controller='xml', action='rss') == '/xml/rss/feed.xml'
+        assert m.generate(controller='admin/comments', action='view', article_id=4, id=2) == '/admin/comments/article/4/view/2'
+        assert m.generate(controller='admin/general') == '/admin'
+        assert m.generate(controller='admin/comments', article_id=4) == '/admin/comments/article/4/index'
+        assert m.generate(controller='admin/comments', action=None, article_id=4) == '/admin/comments/article/4'
+        assert m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1) == '/articles/2004/2/20/page/1'
+        assert m.generate(controller='articles', action='category') == '/articles/category'
+        assert m.generate(controller='xml') == '/xml/index/feed.xml'
+        assert m.generate(controller='xml', action='articlerss') == '/xml/articlerss/feed.xml'
+
+        assert m.generate(controller='admin/comments', id=2) is None
+        assert m.generate(controller='articles', action='find_by_date', year=2004) is None
 
     def test_big_multiroute_with_splits(self):
         m = Mapper(explicit=False)
@@ -293,26 +288,22 @@ def test_big_multiroute_with_splits(self):
         m.connect('articles/category/:id', controller='articles', action='category')
         m.connect('pages/*name', controller='articles', action='view_page')
 
+        assert m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken') == '/pages/the/idiot/has/spoken'
+        assert m.generate(controller='articles', action='index') == '/'
+        assert m.generate(controller='xml', action='articlerss', id=4) == '/xml/articlerss/4/feed.xml'
+        assert m.generate(controller='xml', action='rss') == '/xml/rss/feed.xml'
+        assert m.generate(controller='admin/comments', action='view', article_id=4, id=2) == '/admin/comments/article/4/view/2.html'
+        assert m.generate(controller='admin/general') == '/admin'
+        assert m.generate(controller='admin/comments', article_id=4, action='edit', id=3) == '/admin/comments/article/4/edit/3.html'
+
+        assert m.generate(controller='admin/comments', action=None, article_id=4) is None
+        assert m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1) == '/articles/2004/2/20/page/1'
+        assert m.generate(controller='articles', action='category') == '/articles/category'
+        assert m.generate(controller='xml') == '/xml/index/feed.xml'
+        assert m.generate(controller='xml', action='articlerss') == '/xml/articlerss/feed.xml'
 
-        eq_('/pages/the/idiot/has/spoken',
-            m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken'))
-        eq_('/', m.generate(controller='articles', action='index'))
-        eq_('/xml/articlerss/4/feed.xml', m.generate(controller='xml', action='articlerss', id=4))
-        eq_('/xml/rss/feed.xml', m.generate(controller='xml', action='rss'))
-        eq_('/admin/comments/article/4/view/2.html',
-            m.generate(controller='admin/comments', action='view', article_id=4, id=2))
-        eq_('/admin', m.generate(controller='admin/general'))
-        eq_('/admin/comments/article/4/edit/3.html',
-            m.generate(controller='admin/comments', article_id=4, action='edit', id=3))
-        eq_(None, m.generate(controller='admin/comments', action=None, article_id=4))
-        eq_('/articles/2004/2/20/page/1',
-            m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1))
-        eq_('/articles/category', m.generate(controller='articles', action='category'))
-        eq_('/xml/index/feed.xml', m.generate(controller='xml'))
-        eq_('/xml/articlerss/feed.xml', m.generate(controller='xml', action='articlerss'))
-
-        eq_(None, m.generate(controller='admin/comments', id=2))
-        eq_(None, m.generate(controller='articles', action='find_by_date', year=2004))
+        assert m.generate(controller='admin/comments', id=2) is None
+        assert m.generate(controller='articles', action='find_by_date', year=2004) is None
 
     def test_big_multiroute_with_nomin(self):
         m = Mapper(explicit=False)
@@ -337,23 +328,20 @@ def test_big_multiroute_with_nomin(self):
         m.connect('pages/*name', controller='articles', action='view_page')
 
 
-        eq_('/pages/the/idiot/has/spoken',
-            m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken'))
-        eq_('/', m.generate(controller='articles', action='index'))
-        eq_('/xml/articlerss/4/feed.xml', m.generate(controller='xml', action='articlerss', id=4))
-        eq_('/xml/rss/feed.xml', m.generate(controller='xml', action='rss'))
-        eq_('/admin/comments/article/4/view/2',
-            m.generate(controller='admin/comments', action='view', article_id=4, id=2))
-        eq_('/admin', m.generate(controller='admin/general'))
-        eq_('/articles/2004/2/20/page/1',
-            m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1))
-        eq_(None, m.generate(controller='articles', action='category'))
-        eq_('/articles/category/4', m.generate(controller='articles', action='category', id=4))
-        eq_('/xml/index/feed.xml', m.generate(controller='xml'))
-        eq_('/xml/articlerss/feed.xml', m.generate(controller='xml', action='articlerss'))
-
-        eq_(None, m.generate(controller='admin/comments', id=2))
-        eq_(None, m.generate(controller='articles', action='find_by_date', year=2004))
+        assert m.generate(controller='articles', action='view_page', name='the/idiot/has/spoken') == '/pages/the/idiot/has/spoken'
+        assert m.generate(controller='articles', action='index') == '/'
+        assert m.generate(controller='xml', action='articlerss', id=4) == '/xml/articlerss/4/feed.xml'
+        assert m.generate(controller='xml', action='rss') == '/xml/rss/feed.xml'
+        assert m.generate(controller='admin/comments', action='view', article_id=4, id=2) == '/admin/comments/article/4/view/2'
+        assert m.generate(controller='admin/general') == '/admin'
+        assert m.generate(controller='articles', action='find_by_date', year=2004, month=2, day=20, page=1) == '/articles/2004/2/20/page/1'
+        assert m.generate(controller='articles', action='category') is None
+        assert m.generate(controller='articles', action='category', id=4) == '/articles/category/4'
+        assert m.generate(controller='xml') == '/xml/index/feed.xml'
+        assert m.generate(controller='xml', action='articlerss') == '/xml/articlerss/feed.xml'
+
+        assert m.generate(controller='admin/comments', id=2) is None
+        assert m.generate(controller='articles', action='find_by_date', year=2004) is None
 
     def test_no_extras(self):
         m = Mapper()
@@ -361,7 +349,7 @@ def test_no_extras(self):
         m.connect(':controller/:action/:id')
         m.connect('archive/:year/:month/:day', controller='blog', action='view', month=None, day=None)
 
-        eq_('/archive/2004', m.generate(controller='blog', action='view', year=2004))
+        assert m.generate(controller='blog', action='view', year=2004) == '/archive/2004'
 
     def test_no_extras_with_splits(self):
         m = Mapper()
@@ -369,7 +357,7 @@ def test_no_extras_with_splits(self):
         m.connect(':(controller)/:(action)/:(id)')
         m.connect('archive/:(year)/:(month)/:(day)', controller='blog', action='view', month=None, day=None)
 
-        eq_('/archive/2004', m.generate(controller='blog', action='view', year=2004))
+        assert m.generate(controller='blog', action='view', year=2004) == '/archive/2004'
 
     def test_the_smallest_route(self):
         for path in ['pages/:title', 'pages/:(title)']:
@@ -377,8 +365,8 @@ def test_the_smallest_route(self):
             m.connect('', controller='page', action='view', title='HomePage')
             m.connect(path, controller='page', action='view')
 
-            eq_('/', m.generate(controller='page', action='view', title='HomePage'))
-            eq_('/pages/joe', m.generate(controller='page', action='view', title='joe'))
+            assert m.generate(controller='page', action='view', title='HomePage') == '/'
+            assert m.generate(controller='page', action='view', title='joe') == '/pages/joe'
 
     def test_extras(self):
         m = Mapper(explicit=False)
@@ -386,9 +374,9 @@ def test_extras(self):
         m.connect('viewpost/:id', controller='post', action='view')
         m.connect(':controller/:action/:id')
 
-        eq_('/viewpost/2?extra=x%2Fy', m.generate(controller='post', action='view', id=2, extra='x/y'))
-        eq_('/blog?extra=3', m.generate(controller='blog', action='index', extra=3))
-        eq_('/viewpost/2?extra=3', m.generate(controller='post', action='view', id=2, extra=3))
+        assert m.generate(controller='post', action='view', id=2, extra='x/y') == '/viewpost/2?extra=x%2Fy'
+        assert m.generate(controller='blog', action='index', extra=3) == '/blog?extra=3'
+        assert m.generate(controller='post', action='view', id=2, extra=3) == '/viewpost/2?extra=3'
 
     def test_extras_with_splits(self):
         m = Mapper(explicit=False)
@@ -396,8 +384,8 @@ def test_extras_with_splits(self):
         m.connect('viewpost/:(id)', controller='post', action='view')
         m.connect(':(controller)/:(action)/:(id)')
 
-        eq_('/blog?extra=3', m.generate(controller='blog', action='index', extra=3))
-        eq_('/viewpost/2?extra=3', m.generate(controller='post', action='view', id=2, extra=3))
+        assert m.generate(controller='blog', action='index', extra=3) == '/blog?extra=3'
+        assert m.generate(controller='post', action='view', id=2, extra=3) == '/viewpost/2?extra=3'
 
     def test_extras_as_unicode(self):
         m = Mapper()
@@ -405,7 +393,7 @@ def test_extras_as_unicode(self):
         thing = "whatever"
         euro = u"\u20ac" # Euro symbol
 
-        eq_("/%s?extra=%%E2%%82%%AC" % thing, m.generate(something=thing, extra=euro))
+        assert m.generate(something=thing, extra=euro) == "/%s?extra=%%E2%%82%%AC" % thing
 
     def test_extras_as_list_of_unicodes(self):
         m = Mapper()
@@ -413,18 +401,17 @@ def test_extras_as_list_of_unicodes(self):
         thing = "whatever"
         euro = [u"\u20ac", u"\xa3"] # Euro and Pound sterling symbols
 
-        eq_("/%s?extra=%%E2%%82%%AC&extra=%%C2%%A3" % thing, m.generate(something=thing, extra=euro))
+        assert m.generate(something=thing, extra=euro) == "/%s?extra=%%E2%%82%%AC&extra=%%C2%%A3" % thing
 
 
     def test_static(self):
         m = Mapper()
         m.connect('hello/world',known='known_value',controller='content',action='index')
 
-        eq_('/hello/world', m.generate(controller='content',action= 'index',known ='known_value'))
-        eq_('/hello/world?extra=hi',
-            m.generate(controller='content',action='index',known='known_value',extra='hi'))
+        assert m.generate(controller='content',action= 'index',known ='known_value') == '/hello/world'
+        assert m.generate(controller='content',action='index',known='known_value',extra='hi') == '/hello/world?extra=hi'
 
-        eq_(None, m.generate(known='foo'))
+        assert m.generate(known='foo') is None
 
     def test_typical(self):
         for path in [':controller/:action/:id', ':(controller)/:(action)/:(id)']:
@@ -433,15 +420,15 @@ def test_typical(self):
             m.minimization = True
             m.connect(path, action = 'index', id = None)
 
-            eq_('/content', m.generate(controller='content', action='index'))
-            eq_('/content/list', m.generate(controller='content', action='list'))
-            eq_('/content/show/10', m.generate(controller='content', action='show', id=10))
+            assert m.generate(controller='content', action='index') == '/content'
+            assert m.generate(controller='content', action='list') == '/content/list'
+            assert m.generate(controller='content', action='show', id=10) == '/content/show/10'
 
-            eq_('/admin/user', m.generate(controller='admin/user', action='index'))
-            eq_('/admin/user', m.generate(controller='admin/user'))
-            eq_('/admin/user/show/10', m.generate(controller='admin/user', action='show', id=10))
+            assert m.generate(controller='admin/user', action='index') == '/admin/user'
+            assert m.generate(controller='admin/user') == '/admin/user'
+            assert m.generate(controller='admin/user', action='show', id=10) == '/admin/user/show/10'
 
-            eq_('/content', m.generate(controller='content'))
+            assert m.generate(controller='content') == '/content'
 
     def test_route_with_fixnum_default(self):
         m = Mapper(explicit=False)
@@ -449,15 +436,15 @@ def test_route_with_fixnum_default(self):
         m.connect('page/:id', controller='content', action='show_page', id=1)
         m.connect(':controller/:action/:id')
 
-        eq_('/page', m.generate(controller='content', action='show_page'))
-        eq_('/page', m.generate(controller='content', action='show_page', id=1))
-        eq_('/page', m.generate(controller='content', action='show_page', id='1'))
-        eq_('/page/10', m.generate(controller='content', action='show_page', id=10))
+        assert m.generate(controller='content', action='show_page') == '/page'
+        assert m.generate(controller='content', action='show_page', id=1) == '/page'
+        assert m.generate(controller='content', action='show_page', id='1') == '/page'
+        assert m.generate(controller='content', action='show_page', id=10) == '/page/10'
 
-        eq_('/blog/show/4', m.generate(controller='blog', action='show', id=4))
-        eq_('/page', m.generate(controller='content', action='show_page'))
-        eq_('/page/4', m.generate(controller='content', action='show_page',id=4))
-        eq_('/content/show', m.generate(controller='content', action='show'))
+        assert m.generate(controller='blog', action='show', id=4) == '/blog/show/4'
+        assert m.generate(controller='content', action='show_page') == '/page'
+        assert m.generate(controller='content', action='show_page',id=4) == '/page/4'
+        assert m.generate(controller='content', action='show') == '/content/show'
 
     def test_route_with_fixnum_default_with_splits(self):
         m = Mapper(explicit=False)
@@ -465,15 +452,15 @@ def test_route_with_fixnum_default_with_splits(self):
         m.connect('page/:(id)', controller='content', action='show_page', id =1)
         m.connect(':(controller)/:(action)/:(id)')
 
-        eq_('/page', m.generate(controller='content', action='show_page'))
-        eq_('/page', m.generate(controller='content', action='show_page', id=1))
-        eq_('/page', m.generate(controller='content', action='show_page', id='1'))
-        eq_('/page/10', m.generate(controller='content', action='show_page', id=10))
+        assert m.generate(controller='content', action='show_page') == '/page'
+        assert m.generate(controller='content', action='show_page', id=1) == '/page'
+        assert m.generate(controller='content', action='show_page', id='1') == '/page'
+        assert m.generate(controller='content', action='show_page', id=10) == '/page/10'
 
-        eq_('/blog/show/4', m.generate(controller='blog', action='show', id=4))
-        eq_('/page', m.generate(controller='content', action='show_page'))
-        eq_('/page/4', m.generate(controller='content', action='show_page',id=4))
-        eq_('/content/show', m.generate(controller='content', action='show'))
+        assert m.generate(controller='blog', action='show', id=4) == '/blog/show/4'
+        assert m.generate(controller='content', action='show_page') == '/page'
+        assert m.generate(controller='content', action='show_page',id=4) == '/page/4'
+        assert m.generate(controller='content', action='show') == '/content/show'
 
     def test_uppercase_recognition(self):
         for path in [':controller/:action/:id', ':(controller)/:(action)/:(id)']:
@@ -481,11 +468,10 @@ def test_uppercase_recognition(self):
             m.minimization = True
             m.connect(path)
 
-            eq_('/Content', m.generate(controller='Content', action='index'))
-            eq_('/Content/list', m.generate(controller='Content', action='list'))
-            eq_('/Content/show/10', m.generate(controller='Content', action='show', id='10'))
-
-            eq_('/Admin/NewsFeed', m.generate(controller='Admin/NewsFeed', action='index'))
+            assert m.generate(controller='Content', action='index') == '/Content'
+            assert m.generate(controller='Content', action='list') == '/Content/list'
+            assert m.generate(controller='Content', action='show', id='10') == '/Content/show/10'
+            assert m.generate(controller='Admin/NewsFeed', action='index') == '/Admin/NewsFeed'
 
     def test_backwards(self):
         m = Mapper(explicit=False)
@@ -493,8 +479,8 @@ def test_backwards(self):
         m.connect('page/:id/:action', controller='pages', action='show')
         m.connect(':controller/:action/:id')
 
-        eq_('/page/20', m.generate(controller='pages', action='show', id=20))
-        eq_('/pages/boo', m.generate(controller='pages', action='boo'))
+        assert m.generate(controller='pages', action='show', id=20) == '/page/20'
+        assert m.generate(controller='pages', action='boo') == '/pages/boo'
 
     def test_backwards_with_splits(self):
         m = Mapper(explicit=False)
@@ -502,16 +488,16 @@ def test_backwards_with_splits(self):
         m.connect('page/:(id)/:(action)', controller='pages', action='show')
         m.connect(':(controller)/:(action)/:(id)')
 
-        eq_('/page/20', m.generate(controller='pages', action='show', id=20))
-        eq_('/pages/boo', m.generate(controller='pages', action='boo'))
+        assert m.generate(controller='pages', action='show', id=20) == '/page/20'
+        assert m.generate(controller='pages', action='boo') == '/pages/boo'
 
     def test_both_requirement_and_optional(self):
         m = Mapper()
         m.minimization = True
         m.connect('test/:year', controller='post', action='show', year=None, requirements = {'year':'\d{4}'})
 
-        eq_('/test', m.generate(controller='post', action='show'))
-        eq_('/test', m.generate(controller='post', action='show', year=None))
+        assert m.generate(controller='post', action='show') == '/test'
+        assert m.generate(controller='post', action='show', year=None) == '/test'
 
     def test_set_to_nil_forgets(self):
         m = Mapper()
@@ -519,18 +505,17 @@ def test_set_to_nil_forgets(self):
         m.connect('pages/:year/:month/:day', controller='content', action='list_pages', month=None, day=None)
         m.connect(':controller/:action/:id')
 
-        eq_('/pages/2005', m.generate(controller='content', action='list_pages', year=2005))
-        eq_('/pages/2005/6', m.generate(controller='content', action='list_pages', year=2005, month=6))
-        eq_('/pages/2005/6/12',
-            m.generate(controller='content', action='list_pages', year=2005, month=6, day=12))
+        assert m.generate(controller='content', action='list_pages', year=2005) == '/pages/2005'
+        assert m.generate(controller='content', action='list_pages', year=2005, month=6) == '/pages/2005/6'
+        assert m.generate(controller='content', action='list_pages', year=2005, month=6, day=12) == '/pages/2005/6/12'
 
     def test_url_with_no_action_specified(self):
         m = Mapper()
         m.connect('', controller='content')
         m.connect(':controller/:action/:id')
 
-        eq_('/', m.generate(controller='content', action='index'))
-        eq_('/', m.generate(controller='content'))
+        assert m.generate(controller='content', action='index') == '/'
+        assert m.generate(controller='content') == '/'
 
     def test_url_with_prefix(self):
         m = Mapper(explicit=False)
@@ -539,9 +524,9 @@ def test_url_with_prefix(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/blog/content/view', m.generate(controller='content', action='view'))
-        eq_('/blog/content', m.generate(controller='content'))
-        eq_('/blog/admin/comments', m.generate(controller='admin/comments'))
+        assert m.generate(controller='content', action='view') == '/blog/content/view'
+        assert m.generate(controller='content') == '/blog/content'
+        assert m.generate(controller='admin/comments') == '/blog/admin/comments'
 
     def test_url_with_prefix_deeper(self):
         m = Mapper(explicit=False)
@@ -550,9 +535,9 @@ def test_url_with_prefix_deeper(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/blog/phil/content/view', m.generate(controller='content', action='view'))
-        eq_('/blog/phil/content', m.generate(controller='content'))
-        eq_('/blog/phil/admin/comments', m.generate(controller='admin/comments'))
+        assert m.generate(controller='content', action='view') == '/blog/phil/content/view'
+        assert m.generate(controller='content') == '/blog/phil/content'
+        assert m.generate(controller='admin/comments') == '/blog/phil/admin/comments'
 
     def test_url_with_environ_empty(self):
         m = Mapper(explicit=False)
@@ -561,9 +546,9 @@ def test_url_with_environ_empty(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/content/view', m.generate(controller='content', action='view'))
-        eq_('/content', m.generate(controller='content'))
-        eq_('/admin/comments', m.generate(controller='admin/comments'))
+        assert m.generate(controller='content', action='view') == '/content/view'
+        assert m.generate(controller='content') == '/content'
+        assert m.generate(controller='admin/comments') == '/admin/comments'
 
     def test_url_with_environ(self):
         m = Mapper(explicit=False)
@@ -572,25 +557,25 @@ def test_url_with_environ(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/blog/content/view', m.generate(controller='content', action='view'))
-        eq_('/blog/content', m.generate(controller='content'))
-        eq_('/blog/content', m.generate(controller='content'))
-        eq_('/blog/admin/comments', m.generate(controller='admin/comments'))
+        assert m.generate(controller='content', action='view') == '/blog/content/view'
+        assert m.generate(controller='content') == '/blog/content'
+        assert m.generate(controller='content') == '/blog/content'
+        assert m.generate(controller='admin/comments') == '/blog/admin/comments'
 
         m.environ = dict(SCRIPT_NAME='/notblog')
 
-        eq_('/notblog/content/view', m.generate(controller='content', action='view'))
-        eq_('/notblog/content', m.generate(controller='content'))
-        eq_('/notblog/content', m.generate(controller='content'))
-        eq_('/notblog/admin/comments', m.generate(controller='admin/comments'))
+        assert m.generate(controller='content', action='view') == '/notblog/content/view'
+        assert m.generate(controller='content') == '/notblog/content'
+        assert m.generate(controller='content') == '/notblog/content'
+        assert m.generate(controller='admin/comments') == '/notblog/admin/comments'
 
     def test_url_with_environ_and_caching(self):
         m = Mapper()
         m.connect("foo", "/", controller="main", action="index")
 
-        eq_('/', m.generate(controller='main', action='index'))
-        eq_('/bar/', m.generate(controller='main', action='index', _environ=dict(SCRIPT_NAME='/bar')))
-        eq_('/', m.generate(controller='main', action='index'))
+        assert m.generate(controller='main', action='index') == '/'
+        assert m.generate(controller='main', action='index', _environ=dict(SCRIPT_NAME='/bar')) == '/bar/'
+        assert m.generate(controller='main', action='index') == '/'
 
     def test_url_with_environ_and_absolute(self):
         m = Mapper(explicit=False)
@@ -600,11 +585,11 @@ def test_url_with_environ_and_absolute(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/blog/content/view', m.generate(controller='content', action='view'))
-        eq_('/blog/content', m.generate(controller='content'))
-        eq_('/blog/content', m.generate(controller='content'))
-        eq_('/blog/admin/comments', m.generate(controller='admin/comments'))
-        eq_('/image/topnav.jpg', url_for('image', name='topnav.jpg'))
+        assert m.generate(controller='content', action='view') == '/blog/content/view'
+        assert m.generate(controller='content') == '/blog/content'
+        assert m.generate(controller='content') == '/blog/content'
+        assert m.generate(controller='admin/comments') == '/blog/admin/comments'
+        assert url_for('image', name='topnav.jpg') == '/image/topnav.jpg'
 
     def test_route_with_odd_leftovers(self):
         m = Mapper(explicit=False)
@@ -612,27 +597,27 @@ def test_route_with_odd_leftovers(self):
         m.connect(':controller/:(action)-:(id)')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_('/content/view-', m.generate(controller='content', action='view'))
-        eq_('/content/index-', m.generate(controller='content'))
+        assert m.generate(controller='content', action='view') == '/content/view-'
+        assert m.generate(controller='content') == '/content/index-'
 
     def test_route_with_end_extension(self):
         m = Mapper(explicit=False)
         m.connect(':controller/:(action)-:(id).html')
         m.create_regs(['content','blog','admin/comments'])
 
-        eq_(None, m.generate(controller='content', action='view'))
-        eq_(None, m.generate(controller='content'))
+        assert m.generate(controller='content', action='view') is None
+        assert m.generate(controller='content') is None
 
-        eq_('/content/view-3.html', m.generate(controller='content', action='view', id=3))
-        eq_('/content/index-2.html', m.generate(controller='content', id=2))
+        assert m.generate(controller='content', action='view', id=3) == '/content/view-3.html'
+        assert m.generate(controller='content', id=2) == '/content/index-2.html'
 
     def test_unicode(self):
         hoge = u'\u30c6\u30b9\u30c8' # the word test in Japanese
         hoge_enc = urllib.parse.quote(hoge.encode('utf-8'))
         m = Mapper()
         m.connect(':hoge')
-        eq_("/%s" % hoge_enc, m.generate(hoge=hoge))
-        self.assert_(isinstance(m.generate(hoge=hoge), str))
+        assert m.generate(hoge=hoge) == "/%s" % hoge_enc
+        assert isinstance(m.generate(hoge=hoge), str)
 
     def test_unicode_static(self):
         hoge = u'\u30c6\u30b9\u30c8' # the word test in Japanese
@@ -641,8 +626,8 @@ def test_unicode_static(self):
         m.minimization = True
         m.connect('google-jp', 'http://www.google.co.jp/search', _static=True)
         m.create_regs(['messages'])
-        eq_("http://www.google.co.jp/search?q=" + hoge_enc, url_for('google-jp', q=hoge))
-        self.assert_(isinstance(url_for('google-jp', q=hoge), str))
+        assert url_for('google-jp', q=hoge) == "http://www.google.co.jp/search?q=" + hoge_enc
+        assert isinstance(url_for('google-jp', q=hoge), str)
 
     def test_other_special_chars(self):
         m = Mapper()
@@ -650,10 +635,10 @@ def test_other_special_chars(self):
         m.connect('/:year/:(slug).:(format),:(locale)', locale='en', format='html')
         m.create_regs(['content'])
 
-        eq_('/2007/test', m.generate(year=2007, slug='test'))
-        eq_('/2007/test.xml', m.generate(year=2007, slug='test', format='xml'))
-        eq_('/2007/test.xml,ja', m.generate(year=2007, slug='test', format='xml', locale='ja'))
-        eq_(None, m.generate(year=2007, format='html'))
+        assert m.generate(year=2007, slug='test') == '/2007/test'
+        assert m.generate(year=2007, slug='test', format='xml') == '/2007/test.xml'
+        assert m.generate(year=2007, slug='test', format='xml', locale='ja') == '/2007/test.xml,ja'
+        assert m.generate(year=2007, format='html') is None
 
     def test_dot_format_args(self):
         for minimization in [False, True]:
@@ -662,11 +647,11 @@ def test_dot_format_args(self):
             m.connect('/songs/{title}{.format}')
             m.connect('/stories/{slug}{.format:pdf}')
 
-            eq_('/songs/my-way', m.generate(title='my-way'))
-            eq_('/songs/my-way.mp3', m.generate(title='my-way', format='mp3'))
-            eq_('/stories/frist-post', m.generate(slug='frist-post'))
-            eq_('/stories/frist-post.pdf', m.generate(slug='frist-post', format='pdf'))
-            eq_(None, m.generate(slug='frist-post', format='doc'))
+            assert m.generate(title='my-way') == '/songs/my-way'
+            assert m.generate(title='my-way', format='mp3') == '/songs/my-way.mp3'
+            assert m.generate(slug='frist-post') == '/stories/frist-post'
+            assert m.generate(slug='frist-post', format='pdf') == '/stories/frist-post.pdf'
+            assert m.generate(slug='frist-post', format='doc') is None
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/tests/test_functional/test_middleware.py b/tests/test_functional/test_middleware.py
index 882df9e..5182d17 100644
--- a/tests/test_functional/test_middleware.py
+++ b/tests/test_functional/test_middleware.py
@@ -1,7 +1,10 @@
 from routes import Mapper
 from routes.middleware import RoutesMiddleware
 from webtest import TestApp
-from nose.tools import eq_
+
+# Prevent pytest from trying to collect webtest's TestApp as tests:
+TestApp.__test__ = False
+
 
 def simple_app(environ, start_response):
     route_dict = environ['wsgiorg.routing_args'][1]
@@ -111,8 +114,8 @@ def test_redirect_middleware():
     assert 'matchdict items are []' in res
 
     res = app.get('/faq/home')
-    eq_('302 Found', res.status)
-    eq_(res.headers['Location'], '/static/faq/home.html')
+    assert res.status == '302 Found'
+    assert res.headers['Location'] == '/static/faq/home.html'
 
     res = app.get('/myapp/some/other/url')
     print(res)
@@ -124,7 +127,7 @@ def test_redirect_middleware():
 
     res = app.get('/home/index')
     assert '301 Moved Permanently' in res.status
-    eq_(res.headers['Location'], '/')
+    assert res.headers['Location'] == '/'
 
 def test_method_conversion():
     map = Mapper(explicit=False)
diff --git a/tests/test_functional/test_nonminimization.py b/tests/test_functional/test_nonminimization.py
index 1b152c4..744a879 100644
--- a/tests/test_functional/test_nonminimization.py
+++ b/tests/test_functional/test_nonminimization.py
@@ -1,8 +1,6 @@
 """Test non-minimization recognition"""
 from six.moves import urllib
 
-from nose.tools import eq_
-
 from routes import url_for
 from routes.mapper import Mapper
 
@@ -14,18 +12,16 @@ def test_basic():
     m.create_regs(['content'])
 
     # Recognize
-    eq_(None, m.match('/content'))
-    eq_(None, m.match('/content/index'))
-    eq_(None, m.match('/content/index/'))
-    eq_({'controller':'content','action':'index','id':'4'},
-        m.match('/content/index/4'))
-    eq_({'controller':'content','action':'view','id':'4.html'},
-        m.match('/content/view/4.html'))
+    assert m.match('/content') is None
+    assert m.match('/content/index') is None
+    assert m.match('/content/index/') is None
+    assert m.match('/content/index/4') == {'controller':'content','action':'index','id':'4'}
+    assert m.match('/content/view/4.html') == {'controller':'content','action':'view','id':'4.html'}
 
     # Generate
-    eq_(None, m.generate(controller='content'))
-    eq_('/content/index/4', m.generate(controller='content', id=4))
-    eq_('/content/view/3', m.generate(controller='content', action='view', id=3))
+    assert m.generate(controller='content') is None
+    assert m.generate(controller='content', id=4) == '/content/index/4'
+    assert m.generate(controller='content', action='view', id=3) == '/content/view/3'
 
 def test_full():
     m = Mapper(explicit=False)
@@ -35,23 +31,20 @@ def test_full():
     m.create_regs(['content'])
 
     # Recognize
-    eq_(None, m.match('/content'))
-    eq_(None, m.match('/content/index'))
-    eq_({'controller':'content','action':'index','id':None},
-        m.match('/content/index/'))
-    eq_({'controller':'content','action':'index','id':'4'},
-        m.match('/content/index/4'))
-    eq_({'controller':'content','action':'view','id':'4.html'},
-        m.match('/content/view/4.html'))
+    assert m.match('/content') is None
+    assert m.match('/content/index') is None
+    assert m.match('/content/index/') == {'controller':'content','action':'index','id':None}
+    assert m.match('/content/index/4') == {'controller':'content','action':'index','id':'4'}
+    assert m.match('/content/view/4.html') == {'controller':'content','action':'view','id':'4.html'}
 
     # Generate
-    eq_(None, m.generate(controller='content'))
+    assert m.generate(controller='content') is None
 
     # Looks odd, but only controller/action are set with non-explicit, so we
     # do need the id to match
-    eq_('/content/index/', m.generate(controller='content', id=None))
-    eq_('/content/index/4', m.generate(controller='content', id=4))
-    eq_('/content/view/3', m.generate(controller='content', action='view', id=3))
+    assert m.generate(controller='content', id=None) == '/content/index/'
+    assert m.generate(controller='content', id=4) == '/content/index/4'
+    assert m.generate(controller='content', action='view', id=3) == '/content/view/3'
 
 def test_action_required():
     m = Mapper()
@@ -60,9 +53,9 @@ def test_action_required():
     m.connect('/:controller/index', action='index')
     m.create_regs(['content'])
 
-    eq_(None, m.generate(controller='content'))
-    eq_(None, m.generate(controller='content', action='fred'))
-    eq_('/content/index', m.generate(controller='content', action='index'))
+    assert m.generate(controller='content') is None
+    assert m.generate(controller='content', action='fred') is None
+    assert m.generate(controller='content', action='index') == '/content/index'
 
 def test_query_params():
     m = Mapper()
@@ -71,9 +64,8 @@ def test_query_params():
     m.connect('/:controller/index', action='index')
     m.create_regs(['content'])
 
-    eq_(None, m.generate(controller='content'))
-    eq_('/content/index?test=sample',
-        m.generate(controller='content', action='index', test='sample'))
+    assert m.generate(controller='content') is None
+    assert m.generate(controller='content', action='index', test='sample') == '/content/index?test=sample'
 
 
 def test_syntax():
@@ -83,16 +75,15 @@ def test_syntax():
     m.create_regs(['content'])
 
     # Recognize
-    eq_(None, m.match('/content'))
-    eq_(None, m.match('/content/index'))
-    eq_(None, m.match('/content/index/'))
-    eq_({'controller':'content','action':'index','id':'4'},
-        m.match('/content/index/4'))
+    assert m.match('/content') is None
+    assert m.match('/content/index') is None
+    assert m.match('/content/index/') is None
+    assert m.match('/content/index/4') == {'controller':'content','action':'index','id':'4'}
 
     # Generate
-    eq_(None, m.generate(controller='content'))
-    eq_('/content/index/4', m.generate(controller='content', id=4))
-    eq_('/content/view/3', m.generate(controller='content', action='view', id=3))
+    assert m.generate(controller='content') is None
+    assert m.generate(controller='content', id=4) == '/content/index/4'
+    assert m.generate(controller='content', action='view', id=3) == '/content/view/3'
 
 def test_regexp_syntax():
     m = Mapper(explicit=False)
@@ -101,18 +92,17 @@ def test_regexp_syntax():
     m.create_regs(['content'])
 
     # Recognize
-    eq_(None, m.match('/content'))
-    eq_(None, m.match('/content/index'))
-    eq_(None, m.match('/content/index/'))
-    eq_(None, m.match('/content/index/3'))
-    eq_({'controller':'content','action':'index','id':'44'},
-        m.match('/content/index/44'))
+    assert m.match('/content') is None
+    assert m.match('/content/index') is None
+    assert m.match('/content/index/') is None
+    assert m.match('/content/index/3') is None
+    assert m.match('/content/index/44') == {'controller':'content','action':'index','id':'44'}
 
     # Generate
-    eq_(None, m.generate(controller='content'))
-    eq_(None, m.generate(controller='content', id=4))
-    eq_('/content/index/43', m.generate(controller='content', id=43))
-    eq_('/content/view/31', m.generate(controller='content', action='view', id=31))
+    assert m.generate(controller='content') is None
+    assert m.generate(controller='content', id=4) is None
+    assert m.generate(controller='content', id=43) == '/content/index/43'
+    assert m.generate(controller='content', action='view', id=31) == '/content/view/31'
 
 def test_unicode():
     hoge = u'\u30c6\u30b9\u30c8' # the word test in Japanese
@@ -120,7 +110,7 @@ def test_unicode():
     m = Mapper()
     m.minimization = False
     m.connect(':hoge')
-    eq_("/%s" % hoge_enc, m.generate(hoge=hoge))
+    assert m.generate(hoge=hoge) == "/%s" % hoge_enc
     assert isinstance(m.generate(hoge=hoge), str)
 
 def test_unicode_static():
@@ -130,8 +120,7 @@ def test_unicode_static():
     m.minimization = False
     m.connect('google-jp', 'http://www.google.co.jp/search', _static=True)
     m.create_regs(['messages'])
-    eq_("http://www.google.co.jp/search?q=" + hoge_enc,
-                     url_for('google-jp', q=hoge))
+    assert url_for('google-jp', q=hoge) == "http://www.google.co.jp/search?q=" + hoge_enc
     assert isinstance(url_for('google-jp', q=hoge), str)
 
 def test_other_special_chars():
@@ -140,5 +129,5 @@ def test_other_special_chars():
     m.connect('/:year/:(slug).:(format),:(locale)', locale='en', format='html')
     m.create_regs(['content'])
 
-    eq_('/2007/test.xml,ja', m.generate(year=2007, slug='test', format='xml', locale='ja'))
-    eq_(None, m.generate(year=2007, format='html'))
+    assert m.generate(year=2007, slug='test', format='xml', locale='ja') == '/2007/test.xml,ja'
+    assert m.generate(year=2007, format='html') is None
diff --git a/tests/test_functional/test_recognition.py b/tests/test_functional/test_recognition.py
index 03fe6a7..cf60554 100644
--- a/tests/test_functional/test_recognition.py
+++ b/tests/test_functional/test_recognition.py
@@ -3,8 +3,8 @@
 import sys
 import time
 import unittest
+import pytest
 from six.moves import urllib
-from nose.tools import eq_, assert_raises
 from routes import *
 from routes.util import RoutesException
 
@@ -16,12 +16,12 @@ def test_regexp_char_escaping(self):
         m.connect(':controller/:(action).:(id)')
         m.create_regs(['content'])
 
-        eq_({'action':'view','controller':'content','id':'2'}, m.match('/content/view.2'))
+        assert m.match('/content/view.2') == {'action':'view','controller':'content','id':'2'}
 
         m.connect(':controller/:action/:id')
         m.create_regs(['content', 'find.all'])
-        eq_({'action':'view','controller':'find.all','id':None}, m.match('/find.all/view'))
-        eq_(None, m.match('/findzall/view'))
+        assert m.match('/find.all/view') == {'action':'view','controller':'find.all','id':None}
+        assert m.match('/findzall/view') is None
 
     def test_all_static(self):
         m = Mapper(explicit=False)
@@ -29,19 +29,18 @@ def test_all_static(self):
         m.connect('hello/world/how/are/you', controller='content', action='index')
         m.create_regs([])
 
-        eq_(None, m.match('/x'))
-        eq_(None, m.match('/hello/world/how'))
-        eq_(None, m.match('/hello/world/how/are'))
-        eq_(None, m.match('/hello/world/how/are/you/today'))
-        eq_({'controller':'content','action':'index'}, m.match('/hello/world/how/are/you'))
+        assert m.match('/x') is None
+        assert m.match('/hello/world/how') is None
+        assert m.match('/hello/world/how/are') is None
+        assert m.match('/hello/world/how/are/you/today') is None
+        assert m.match('/hello/world/how/are/you') == {'controller':'content','action':'index'}
 
     def test_unicode(self):
         hoge = u'\u30c6\u30b9\u30c8' # the word test in Japanese
         m = Mapper(explicit=False)
         m.minimization = True
         m.connect(':hoge')
-        eq_({'controller': 'content', 'action': 'index', 'hoge': hoge},
-                         m.match('/' + hoge))
+        assert m.match('/' + hoge) == {'controller': 'content', 'action': 'index', 'hoge': hoge}
 
     def test_disabling_unicode(self):
         hoge = u'\u30c6\u30b9\u30c8' # the word test in Japanese
@@ -50,8 +49,7 @@ def test_disabling_unicode(self):
         m.minimization = True
         m.encoding = None
         m.connect(':hoge')
-        eq_({'controller': 'content', 'action': 'index', 'hoge': hoge_enc},
-                         m.match('/' + hoge_enc))
+        assert m.match('/' + hoge_enc) == {'controller': 'content', 'action': 'index', 'hoge': hoge_enc}
 
     def test_basic_dynamic(self):
         for path in ['hi/:name', 'hi/:(name)']:
@@ -60,12 +58,12 @@ def test_basic_dynamic(self):
             m.connect(path, controller='content')
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_(None, m.match('/hi/dude/what'))
-            eq_({'controller':'content','name':'dude','action':'index'}, m.match('/hi/dude'))
-            eq_({'controller':'content','name':'dude','action':'index'}, m.match('/hi/dude/'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/hi/dude/what') is None
+            assert m.match('/hi/dude') == {'controller':'content','name':'dude','action':'index'}
+            assert m.match('/hi/dude/') == {'controller':'content','name':'dude','action':'index'}
 
     def test_basic_dynamic_backwards(self):
         for path in [':name/hi', ':(name)/hi']:
@@ -74,13 +72,13 @@ def test_basic_dynamic_backwards(self):
             m.connect(path)
             m.create_regs([])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/hi'))
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/shop/wallmart/hi'))
-            eq_({'name':'fred', 'action':'index', 'controller':'content'}, m.match('/fred/hi'))
-            eq_({'name':'index', 'action':'index', 'controller':'content'}, m.match('/index/hi'))
+            assert m.match('/') is None
+            assert m.match('/hi') is None
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/shop/wallmart/hi') is None
+            assert m.match('/fred/hi') == {'name':'fred','action':'index', 'controller':'content'}
+            assert m.match('/index/hi') == {'name':'index','action':'index', 'controller':'content'}
 
     def test_dynamic_with_underscores(self):
         m = Mapper(explicit=False)
@@ -89,8 +87,8 @@ def test_dynamic_with_underscores(self):
         m.connect(':(controller)/:(action)/:(id)')
         m.create_regs(['article', 'blog'])
 
-        eq_({'controller':'blog','action':'view','id':'0'}, m.match('/blog/view/0'))
-        eq_({'controller':'blog','action':'view','id':None}, m.match('/blog/view'))
+        assert m.match('/blog/view/0') == {'controller':'blog','action':'view','id':'0'}
+        assert m.match('/blog/view') == {'controller':'blog','action':'view','id':None}
 
     def test_dynamic_with_default(self):
         for path in ['hi/:action', 'hi/:(action)']:
@@ -99,12 +97,12 @@ def test_dynamic_with_default(self):
             m.connect(path, controller='content')
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi/dude/what'))
-            eq_({'controller':'content','action':'index'}, m.match('/hi'))
-            eq_({'controller':'content','action':'index'}, m.match('/hi/index'))
-            eq_({'controller':'content','action':'dude'}, m.match('/hi/dude'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi/dude/what') is None
+            assert m.match('/hi') == {'controller':'content','action':'index'}
+            assert m.match('/hi/index') == {'controller':'content','action':'index'}
+            assert m.match('/hi/dude') == {'controller':'content','action':'dude'}
 
     def test_dynamic_with_default_backwards(self):
         for path in [':action/hi', ':(action)/hi']:
@@ -113,13 +111,13 @@ def test_dynamic_with_default_backwards(self):
             m.connect(path, controller='content')
             m.create_regs([])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_({'controller':'content','action':'index'}, m.match('/index/hi'))
-            eq_({'controller':'content','action':'index'}, m.match('/index/hi/'))
-            eq_({'controller':'content','action':'dude'}, m.match('/dude/hi'))
+            assert m.match('/') is None
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/index/hi') == {'controller':'content','action':'index'}
+            assert m.match('/index/hi/') == {'controller':'content','action':'index'}
+            assert m.match('/dude/hi') == {'controller':'content','action':'dude'}
 
     def test_dynamic_with_string_condition(self):
         for path in [':name/hi', ':(name)/hi']:
@@ -128,12 +126,12 @@ def test_dynamic_with_string_condition(self):
             m.connect(path, controller='content', requirements={'name':'index'})
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_(None, m.match('/dude/what/hi'))
-            eq_({'controller':'content','name':'index','action':'index'}, m.match('/index/hi'))
-            eq_(None, m.match('/dude/hi'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/dude/what/hi') is None
+            assert m.match('/index/hi') == {'controller':'content','name':'index','action':'index'}
+            assert m.match('/dude/hi') is None
 
     def test_dynamic_with_string_condition_backwards(self):
         for path in ['hi/:name', 'hi/:(name)']:
@@ -142,12 +140,12 @@ def test_dynamic_with_string_condition_backwards(self):
             m.connect(path, controller='content', requirements={'name':'index'})
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_(None, m.match('/hi/dude/what'))
-            eq_({'controller':'content','name':'index','action':'index'}, m.match('/hi/index'))
-            eq_(None, m.match('/hi/dude'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/hi/dude/what') is None
+            assert m.match('/hi/index') == {'controller':'content','name':'index','action':'index'}
+            assert m.match('/hi/dude') is None
 
     def test_dynamic_with_regexp_condition(self):
         for path in ['hi/:name', 'hi/:(name)']:
@@ -156,16 +154,16 @@ def test_dynamic_with_regexp_condition(self):
             m.connect(path, controller='content', requirements={'name':'[a-z]+'})
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_(None, m.match('/hi/FOXY'))
-            eq_(None, m.match('/hi/138708jkhdf'))
-            eq_(None, m.match('/hi/dkjfl8792343dfsf'))
-            eq_(None, m.match('/hi/dude/what'))
-            eq_(None, m.match('/hi/dude/what/'))
-            eq_({'controller':'content','name':'index','action':'index'}, m.match('/hi/index'))
-            eq_({'controller':'content','name':'dude','action':'index'}, m.match('/hi/dude'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/hi/FOXY') is None
+            assert m.match('/hi/138708jkhdf') is None
+            assert m.match('/hi/dkjfl8792343dfsf') is None
+            assert m.match('/hi/dude/what') is None
+            assert m.match('/hi/dude/what/') is None
+            assert m.match('/hi/index') == {'controller':'content','name':'index','action':'index'}
+            assert m.match('/hi/dude') == {'controller':'content','name':'dude','action':'index'}
 
     def test_dynamic_with_regexp_and_default(self):
         for path in ['hi/:action', 'hi/:(action)']:
@@ -174,15 +172,15 @@ def test_dynamic_with_regexp_and_default(self):
             m.connect(path, controller='content', requirements={'action':'[a-z]+'})
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi/FOXY'))
-            eq_(None, m.match('/hi/138708jkhdf'))
-            eq_(None, m.match('/hi/dkjfl8792343dfsf'))
-            eq_(None, m.match('/hi/dude/what/'))
-            eq_({'controller':'content','action':'index'}, m.match('/hi'))
-            eq_({'controller':'content','action':'index'}, m.match('/hi/index'))
-            eq_({'controller':'content','action':'dude'}, m.match('/hi/dude'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi/FOXY') is None
+            assert m.match('/hi/138708jkhdf') is None
+            assert m.match('/hi/dkjfl8792343dfsf') is None
+            assert m.match('/hi/dude/what/') is None
+            assert m.match('/hi') == {'controller':'content','action':'index'}
+            assert m.match('/hi/index') == {'controller':'content','action':'index'}
+            assert m.match('/hi/dude') == {'controller':'content','action':'dude'}
 
     def test_dynamic_with_default_and_string_condition_backwards(self):
         for path in [':action/hi', ':(action)/hi']:
@@ -191,11 +189,11 @@ def test_dynamic_with_default_and_string_condition_backwards(self):
             m.connect(path)
             m.create_regs([])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_({'action':'index', 'controller':'content'}, m.match('/index/hi'))
+            assert m.match('/') is None
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/index/hi') == {'action':'index', 'controller':'content'}
 
     def test_dynamic_and_controller_with_string_and_default_backwards(self):
         for path in [':controller/:action/hi', ':(controller)/:(action)/hi']:
@@ -203,8 +201,8 @@ def test_dynamic_and_controller_with_string_and_default_backwards(self):
             m.connect(path, controller='content')
             m.create_regs(['content','admin/user'])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/fred'))
+            assert m.match('/') is None
+            assert m.match('/fred') is None
 
 
     def test_multiroute(self):
@@ -216,14 +214,12 @@ def test_multiroute(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/archive'))
-        eq_(None, m.match('/archive/2004/ab'))
-        eq_({'controller':'blog','action':'view','id':None}, m.match('/blog/view'))
-        eq_({'controller':'blog','action':'view','month':None,'day':None,'year':'2004'},
-                         m.match('/archive/2004'))
-        eq_({'controller':'blog','action':'view', 'month':'4', 'day':None,'year':'2004'},
-                         m.match('/archive/2004/4'))
+        assert m.match('/') is None
+        assert m.match('/archive') is None
+        assert m.match('/archive/2004/ab') is None
+        assert m.match('/blog/view') == {'controller':'blog','action':'view','id':None}
+        assert m.match('/archive/2004') == {'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}
+        assert m.match('/archive/2004/4') == {'controller':'blog','action':'view', 'month':'4', 'day':None,'year':'2004'}
 
     def test_multiroute_with_nomin(self):
         m = Mapper()
@@ -234,14 +230,13 @@ def test_multiroute_with_nomin(self):
         m.connect('/:controller/:action/:id')
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/archive'))
-        eq_(None, m.match('/archive/2004/ab'))
-        eq_(None, m.match('/archive/2004/4'))
-        eq_(None, m.match('/archive/2004'))
-        eq_({'controller':'blog','action':'view','id':'3'}, m.match('/blog/view/3'))
-        eq_({'controller':'blog','action':'view','month':'10','day':'23','year':'2004'},
-                         m.match('/archive/2004/10/23'))
+        assert m.match('/') is None
+        assert m.match('/archive') is None
+        assert m.match('/archive/2004/ab') is None
+        assert m.match('/archive/2004/4') is None
+        assert m.match('/archive/2004') is None
+        assert m.match('/blog/view/3') == {'controller':'blog','action':'view','id':'3'}
+        assert m.match('/archive/2004/10/23') == {'controller':'blog','action':'view','month':'10','day':'23','year':'2004'}
 
     def test_multiroute_with_splits(self):
         m = Mapper(explicit=False)
@@ -252,14 +247,12 @@ def test_multiroute_with_splits(self):
         m.connect(':(controller)/:(action)/:(id)')
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/archive'))
-        eq_(None, m.match('/archive/2004/ab'))
-        eq_({'controller':'blog','action':'view','id':None}, m.match('/blog/view'))
-        eq_({'controller':'blog','action':'view','month':None,'day':None,'year':'2004'},
-                         m.match('/archive/2004'))
-        eq_({'controller':'blog','action':'view', 'month':'4', 'day':None,'year':'2004'},
-                         m.match('/archive/2004/4'))
+        assert m.match('/') is None
+        assert m.match('/archive') is None
+        assert m.match('/archive/2004/ab') is None
+        assert m.match('/blog/view') == {'controller':'blog','action':'view','id':None}
+        assert m.match('/archive/2004') == {'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}
+        assert m.match('/archive/2004/4') == {'controller':'blog','action':'view', 'month':'4', 'day':None,'year':'2004'}
 
     def test_dynamic_with_regexp_defaults_and_gaps(self):
         m = Mapper()
@@ -269,12 +262,12 @@ def test_dynamic_with_regexp_defaults_and_gaps(self):
         m.connect('view/:id/:controller', controller='blog', id=2, action='view', requirements={'id':'\d{1,2}'})
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/archive'))
-        eq_(None, m.match('/archive/2004/haha'))
-        eq_(None, m.match('/view/blog'))
-        eq_({'controller':'blog', 'action':'view', 'id':'2'}, m.match('/view'))
-        eq_({'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}, m.match('/archive/2004'))
+        assert m.match('/') is None
+        assert m.match('/archive') is None
+        assert m.match('/archive/2004/haha') is None
+        assert m.match('/view/blog') is None
+        assert m.match('/view') == {'controller':'blog', 'action':'view', 'id':'2'}
+        assert m.match('/archive/2004') == {'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}
 
     def test_dynamic_with_regexp_defaults_and_gaps_and_splits(self):
         m = Mapper()
@@ -284,12 +277,12 @@ def test_dynamic_with_regexp_defaults_and_gaps_and_splits(self):
         m.connect('view/:(id)/:(controller)', controller='blog', id=2, action='view', requirements={'id':'\d{1,2}'})
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/archive'))
-        eq_(None, m.match('/archive/2004/haha'))
-        eq_(None, m.match('/view/blog'))
-        eq_({'controller':'blog', 'action':'view', 'id':'2'}, m.match('/view'))
-        eq_({'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}, m.match('/archive/2004'))
+        assert m.match('/') is None
+        assert m.match('/archive') is None
+        assert m.match('/archive/2004/haha') is None
+        assert m.match('/view/blog') is None
+        assert m.match('/view') == {'controller':'blog', 'action':'view', 'id':'2'}
+        assert m.match('/archive/2004') == {'controller':'blog','action':'view','month':None,'day':None,'year':'2004'}
 
     def test_dynamic_with_regexp_gaps_controllers(self):
         for path in ['view/:id/:controller', 'view/:(id)/:(controller)']:
@@ -298,12 +291,12 @@ def test_dynamic_with_regexp_gaps_controllers(self):
             m.connect(path, id=2, action='view', requirements={'id':'\d{1,2}'})
             m.create_regs(['post','blog','admin/user'])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/view'))
-            eq_(None, m.match('/view/blog'))
-            eq_(None, m.match('/view/3'))
-            eq_(None, m.match('/view/4/honker'))
-            eq_({'controller':'blog','action':'view','id':'2'}, m.match('/view/2/blog'))
+            assert m.match('/') is None
+            assert m.match('/view') is None
+            assert m.match('/view/blog') is None
+            assert m.match('/view/3') is None
+            assert m.match('/view/4/honker') is None
+            assert m.match('/view/2/blog') == {'controller':'blog','action':'view','id':'2'}
 
     def test_dynamic_with_trailing_strings(self):
         for path in ['view/:id/:controller/super', 'view/:(id)/:(controller)/super']:
@@ -312,14 +305,14 @@ def test_dynamic_with_trailing_strings(self):
             m.connect(path, controller='blog', id=2, action='view', requirements={'id':'\d{1,2}'})
             m.create_regs(['post','blog','admin/user'])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/view'))
-            eq_(None, m.match('/view/blah/blog/super'))
-            eq_(None, m.match('/view/ha/super'))
-            eq_(None, m.match('/view/super'))
-            eq_(None, m.match('/view/4/super'))
-            eq_({'controller':'blog','action':'view','id':'2'}, m.match('/view/2/blog/super'))
-            eq_({'controller':'admin/user','action':'view','id':'4'}, m.match('/view/4/admin/user/super'))
+            assert m.match('/') is None
+            assert m.match('/view') is None
+            assert m.match('/view/blah/blog/super') is None
+            assert m.match('/view/ha/super') is None
+            assert m.match('/view/super') is None
+            assert m.match('/view/4/super') is None
+            assert m.match('/view/2/blog/super') == {'controller':'blog','action':'view','id':'2'}
+            assert m.match('/view/4/admin/user/super') == {'controller':'admin/user','action':'view','id':'4'}
 
     def test_dynamic_with_trailing_non_keyword_strings(self):
         m = Mapper(explicit=False)
@@ -328,10 +321,10 @@ def test_dynamic_with_trailing_non_keyword_strings(self):
         m.connect('somewhere/:over', controller='post')
         m.create_regs(['post','blog','admin/user'])
 
-        eq_(None, m.match('/'))
-        eq_(None, m.match('/somewhere'))
-        eq_({'controller':'blog','action':'index','over':'near'}, m.match('/somewhere/near/rainbow'))
-        eq_({'controller':'post','action':'index','over':'tomorrow'}, m.match('/somewhere/tomorrow'))
+        assert m.match('/') is None
+        assert m.match('/somewhere') is None
+        assert m.match('/somewhere/near/rainbow') == {'controller':'blog','action':'index','over':'near'}
+        assert m.match('/somewhere/tomorrow') == {'controller':'post','action':'index','over':'tomorrow'}
 
     def test_dynamic_with_trailing_dyanmic_defaults(self):
         for path in ['archives/:action/:article', 'archives/:(action)/:(article)']:
@@ -340,16 +333,14 @@ def test_dynamic_with_trailing_dyanmic_defaults(self):
             m.connect(path, controller='blog')
             m.create_regs(['blog'])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/archives'))
-            eq_(None, m.match('/archives/introduction'))
-            eq_(None, m.match('/archives/sample'))
-            eq_(None, m.match('/view/super'))
-            eq_(None, m.match('/view/4/super'))
-            eq_({'controller':'blog','action':'view','article':'introduction'},
-                             m.match('/archives/view/introduction'))
-            eq_({'controller':'blog','action':'edit','article':'recipes'},
-                             m.match('/archives/edit/recipes'))
+            assert m.match('/') is None
+            assert m.match('/archives') is None
+            assert m.match('/archives/introduction') is None
+            assert m.match('/archives/sample') is None
+            assert m.match('/view/super') is None
+            assert m.match('/view/4/super') is None
+            assert m.match('/archives/view/introduction') == {'controller':'blog','action':'view','article':'introduction'}
+            assert m.match('/archives/edit/recipes') == {'controller':'blog','action':'edit','article':'recipes'}
 
     def test_path(self):
         for path in ['hi/*file', 'hi/*(file)']:
@@ -358,12 +349,12 @@ def test_path(self):
             m.connect(path, controller='content', action='download')
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/hi'))
-            eq_({'controller':'content','action':'download','file':'books/learning_python.pdf'}, m.match('/hi/books/learning_python.pdf'))
-            eq_({'controller':'content','action':'download','file':'dude'}, m.match('/hi/dude'))
-            eq_({'controller':'content','action':'download','file':'dude/what'}, m.match('/hi/dude/what'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/hi') is None
+            assert m.match('/hi/books/learning_python.pdf') == {'controller':'content','action':'download','file':'books/learning_python.pdf'}
+            assert m.match('/hi/dude') == {'controller':'content','action':'download','file':'dude'}
+            assert m.match('/hi/dude/what') == {'controller':'content','action':'download','file':'dude/what'}
 
     def test_path_with_dynamic(self):
         for path in [':controller/:action/*url', ':(controller)/:(action)/*(url)']:
@@ -372,14 +363,14 @@ def test_path_with_dynamic(self):
             m.connect(path)
             m.create_regs(['content','admin/user'])
 
-            eq_(None, m.match('/'))
-            eq_(None, m.match('/blog'))
-            eq_(None, m.match('/content'))
-            eq_(None, m.match('/content/view'))
-            eq_({'controller':'content','action':'view','url':'blob'}, m.match('/content/view/blob'))
-            eq_(None, m.match('/admin/user'))
-            eq_(None, m.match('/admin/user/view'))
-            eq_({'controller':'admin/user','action':'view','url':'blob/check'}, m.match('/admin/user/view/blob/check'))
+            assert m.match('/') is None
+            assert m.match('/blog') is None
+            assert m.match('/content') is None
+            assert m.match('/content/view') is None
+            assert m.match('/content/view/blob') == {'controller':'content','action':'view','url':'blob'}
+            assert m.match('/admin/user') is None
+            assert m.match('/admin/user/view') is None
+            assert m.match('/admin/user/view/blob/check') == {'controller':'admin/user','action':'view','url':'blob/check'}
 
 
     def test_path_with_dyanmic_and_default(self):
@@ -389,14 +380,14 @@ def test_path_with_dyanmic_and_default(self):
             m.connect(path, controller='content', action='view', url=None)
             m.create_regs(['content','admin/user'])
 
-            eq_(None, m.match('/goober/view/here'))
-            eq_({'controller':'content','action':'view','url':None}, m.match('/'))
-            eq_({'controller':'content','action':'view','url':None}, m.match('/content'))
-            eq_({'controller':'content','action':'view','url':None}, m.match('/content/'))
-            eq_({'controller':'content','action':'view','url':None}, m.match('/content/view'))
-            eq_({'controller':'content','action':'view','url':'fred'}, m.match('/content/view/fred'))
-            eq_({'controller':'admin/user','action':'view','url':None}, m.match('/admin/user'))
-            eq_({'controller':'admin/user','action':'view','url':None}, m.match('/admin/user/view'))
+            assert m.match('/goober/view/here') is None
+            assert m.match('/') == {'controller':'content','action':'view','url':None}
+            assert m.match('/content') == {'controller':'content','action':'view','url':None}
+            assert m.match('/content/') == {'controller':'content','action':'view','url':None}
+            assert m.match('/content/view') == {'controller':'content','action':'view','url':None}
+            assert m.match('/content/view/fred') == {'controller':'content','action':'view','url':'fred'}
+            assert m.match('/admin/user') == {'controller':'admin/user','action':'view','url':None}
+            assert m.match('/admin/user/view') == {'controller':'admin/user','action':'view','url':None}
 
     def test_path_with_dynamic_and_default_backwards(self):
         for path in ['*file/login', '*(file)/login']:
@@ -405,12 +396,12 @@ def test_path_with_dynamic_and_default_backwards(self):
             m.connect(path, controller='content', action='download', file=None)
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_({'controller':'content','action':'download','file':''}, m.match('//login'))
-            eq_({'controller':'content','action':'download','file':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/login'))
-            eq_({'controller':'content','action':'download','file':'dude'}, m.match('/dude/login'))
-            eq_({'controller':'content','action':'download','file':'dude/what'}, m.match('/dude/what/login'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('//login') == {'controller':'content','action':'download','file':''}
+            assert m.match('/books/learning_python.pdf/login') == {'controller':'content','action':'download','file':'books/learning_python.pdf'}
+            assert m.match('/dude/login') == {'controller':'content','action':'download','file':'dude'}
+            assert m.match('/dude/what/login') == {'controller':'content','action':'download','file':'dude/what'}
 
     def test_path_backwards(self):
         for path in ['*file/login', '*(file)/login']:
@@ -419,12 +410,12 @@ def test_path_backwards(self):
             m.connect(path, controller='content', action='download')
             m.create_regs([])
 
-            eq_(None, m.match('/boo'))
-            eq_(None, m.match('/boo/blah'))
-            eq_(None, m.match('/login'))
-            eq_({'controller':'content','action':'download','file':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/login'))
-            eq_({'controller':'content','action':'download','file':'dude'}, m.match('/dude/login'))
-            eq_({'controller':'content','action':'download','file':'dude/what'}, m.match('/dude/what/login'))
+            assert m.match('/boo') is None
+            assert m.match('/boo/blah') is None
+            assert m.match('/login') is None
+            assert m.match('/books/learning_python.pdf/login') == {'controller':'content','action':'download','file':'books/learning_python.pdf'}
+            assert m.match('/dude/login') == {'controller':'content','action':'download','file':'dude'}
+            assert m.match('/dude/what/login') == {'controller':'content','action':'download','file':'dude/what'}
 
     def test_path_backwards_with_controller(self):
         m = Mapper()
@@ -433,17 +424,17 @@ def test_path_backwards_with_controller(self):
         m.connect('*url/:controller', action='view')
         m.create_regs(['content', 'admin/user'])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/boo/blah'))
-        eq_(None, m.match('/login'))
-        eq_({'controller':'content','action':'check_access','url':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/login'))
-        eq_({'controller':'content','action':'check_access','url':'dude'}, m.match('/dude/login'))
-        eq_({'controller':'content','action':'check_access','url':'dude/what'}, m.match('/dude/what/login'))
+        assert m.match('/boo') is None
+        assert m.match('/boo/blah') is None
+        assert m.match('/login') is None
+        assert m.match('/books/learning_python.pdf/login') == {'controller':'content','action':'check_access','url':'books/learning_python.pdf'}
+        assert m.match('/dude/login') == {'controller':'content','action':'check_access','url':'dude'}
+        assert m.match('/dude/what/login') == {'controller':'content','action':'check_access','url':'dude/what'}
 
-        eq_(None, m.match('/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'dude'}, m.match('/dude/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'dude/what'}, m.match('/dude/what/admin/user'))
+        assert m.match('/admin/user') is None
+        assert m.match('/books/learning_python.pdf/admin/user') == {'controller':'admin/user','action':'view','url':'books/learning_python.pdf'}
+        assert m.match('/dude/admin/user') == {'controller':'admin/user','action':'view','url':'dude'}
+        assert m.match('/dude/what/admin/user') == {'controller':'admin/user','action':'view','url':'dude/what'}
 
     def test_path_backwards_with_controller_and_splits(self):
         m = Mapper()
@@ -452,17 +443,17 @@ def test_path_backwards_with_controller_and_splits(self):
         m.connect('*(url)/:(controller)', action='view')
         m.create_regs(['content', 'admin/user'])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/boo/blah'))
-        eq_(None, m.match('/login'))
-        eq_({'controller':'content','action':'check_access','url':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/login'))
-        eq_({'controller':'content','action':'check_access','url':'dude'}, m.match('/dude/login'))
-        eq_({'controller':'content','action':'check_access','url':'dude/what'}, m.match('/dude/what/login'))
+        assert m.match('/boo') is None
+        assert m.match('/boo/blah') is None
+        assert m.match('/login') is None
+        assert m.match('/books/learning_python.pdf/login') == {'controller':'content','action':'check_access','url':'books/learning_python.pdf'}
+        assert m.match('/dude/login') == {'controller':'content','action':'check_access','url':'dude'}
+        assert m.match('/dude/what/login') == {'controller':'content','action':'check_access','url':'dude/what'}
 
-        eq_(None, m.match('/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'books/learning_python.pdf'}, m.match('/books/learning_python.pdf/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'dude'}, m.match('/dude/admin/user'))
-        eq_({'controller':'admin/user','action':'view','url':'dude/what'}, m.match('/dude/what/admin/user'))
+        assert m.match('/admin/user') is None
+        assert m.match('/books/learning_python.pdf/admin/user') == {'controller':'admin/user','action':'view','url':'books/learning_python.pdf'}
+        assert m.match('/dude/admin/user') == {'controller':'admin/user','action':'view','url':'dude'}
+        assert m.match('/dude/what/admin/user') == {'controller':'admin/user','action':'view','url':'dude/what'}
 
     def test_controller(self):
         m = Mapper()
@@ -470,14 +461,14 @@ def test_controller(self):
         m.connect('hi/:controller', action='hi')
         m.create_regs(['content','admin/user'])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/boo/blah'))
-        eq_(None, m.match('/hi/13870948'))
-        eq_(None, m.match('/hi/content/dog'))
-        eq_(None, m.match('/hi/admin/user/foo'))
-        eq_(None, m.match('/hi/admin/user/foo/'))
-        eq_({'controller':'content','action':'hi'}, m.match('/hi/content'))
-        eq_({'controller':'admin/user', 'action':'hi'}, m.match('/hi/admin/user'))
+        assert m.match('/boo') is None
+        assert m.match('/boo/blah') is None
+        assert m.match('/hi/13870948') is None
+        assert m.match('/hi/content/dog') is None
+        assert m.match('/hi/admin/user/foo') is None
+        assert m.match('/hi/admin/user/foo/') is None
+        assert m.match('/hi/content') == {'controller': 'content', 'action': 'hi'}
+        assert m.match('/hi/admin/user') == {'controller': 'admin/user', 'action': 'hi'}
 
     def test_standard_route(self):
         m = Mapper(explicit=False)
@@ -485,16 +476,16 @@ def test_standard_route(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','admin/user'])
 
-        eq_({'controller':'content','action':'index', 'id': None}, m.match('/content'))
-        eq_({'controller':'content','action':'list', 'id':None}, m.match('/content/list'))
-        eq_({'controller':'content','action':'show','id':'10'}, m.match('/content/show/10'))
+        assert m.match('/content') == {'controller':'content','action':'index', 'id': None}
+        assert m.match('/content/list') == {'controller':'content','action':'list', 'id':None}
+        assert m.match('/content/show/10') == {'controller':'content','action':'show','id':'10'}
 
-        eq_({'controller':'admin/user','action':'index', 'id': None}, m.match('/admin/user'))
-        eq_({'controller':'admin/user','action':'list', 'id':None}, m.match('/admin/user/list'))
-        eq_({'controller':'admin/user','action':'show','id':'bbangert'}, m.match('/admin/user/show/bbangert'))
+        assert m.match('/admin/user') == {'controller':'admin/user','action':'index', 'id': None}
+        assert m.match('/admin/user/list') == {'controller':'admin/user','action':'list', 'id':None}
+        assert m.match('/admin/user/show/bbangert') == {'controller':'admin/user','action':'show','id':'bbangert'}
 
-        eq_(None, m.match('/content/show/10/20'))
-        eq_(None, m.match('/food'))
+        assert m.match('/content/show/10/20') is None
+        assert m.match('/food') is None
 
     def test_standard_route_with_gaps(self):
         m = Mapper()
@@ -502,9 +493,9 @@ def test_standard_route_with_gaps(self):
         m.connect(':controller/:action/:(id).py')
         m.create_regs(['content','admin/user'])
 
-        eq_({'controller':'content','action':'index', 'id': 'None'}, m.match('/content/index/None.py'))
-        eq_({'controller':'content','action':'list', 'id':'None'}, m.match('/content/list/None.py'))
-        eq_({'controller':'content','action':'show','id':'10'}, m.match('/content/show/10.py'))
+        assert m.match('/content/index/None.py') == {'controller':'content','action':'index', 'id': 'None'}
+        assert m.match('/content/list/None.py') == {'controller':'content','action':'list', 'id':'None'}
+        assert m.match('/content/show/10.py') == {'controller':'content','action':'show','id':'10'}
 
     def test_standard_route_with_gaps_and_domains(self):
         m = Mapper()
@@ -513,14 +504,14 @@ def test_standard_route_with_gaps_and_domains(self):
         m.connect(':controller/:action/:id')
         m.create_regs(['content','admin/user'])
 
-        eq_({'controller':'content','action':'index', 'id': 'None.py'}, m.match('/content/index/None.py'))
-        eq_({'controller':'content','action':'list', 'id':'None.py'}, m.match('/content/list/None.py'))
-        eq_({'controller':'content','action':'show','id':'10.py'}, m.match('/content/show/10.py'))
-        eq_({'controller':'content','action':'show.all','id':'10.py'}, m.match('/content/show.all/10.py'))
-        eq_({'controller':'content','action':'show','id':'www.groovie.org'}, m.match('/content/show/www.groovie.org'))
+        assert m.match('/content/index/None.py') == {'controller':'content','action':'index', 'id': 'None.py'}
+        assert m.match('/content/list/None.py') == {'controller':'content','action':'list', 'id':'None.py'}
+        assert m.match('/content/show/10.py') == {'controller':'content','action':'show','id':'10.py'}
+        assert m.match('/content/show.all/10.py') == {'controller':'content','action':'show.all','id':'10.py'}
+        assert m.match('/content/show/www.groovie.org') == {'controller':'content','action':'show','id':'www.groovie.org'}
 
-        eq_({'controller':'admin/user','action':'view', 'ext': 'html', 'domain': 'groovie'}, m.match('/manage/groovie'))
-        eq_({'controller':'admin/user','action':'view', 'ext': 'xml', 'domain': 'groovie'}, m.match('/manage/groovie.xml'))
+        assert m.match('/manage/groovie') == {'controller':'admin/user','action':'view', 'ext': 'html', 'domain': 'groovie'}
+        assert m.match('/manage/groovie.xml') == {'controller':'admin/user','action':'view', 'ext': 'xml', 'domain': 'groovie'}
 
     def test_standard_with_domains(self):
         m = Mapper()
@@ -528,7 +519,7 @@ def test_standard_with_domains(self):
         m.connect('manage/:domain', controller='domains', action='view')
         m.create_regs(['domains'])
 
-        eq_({'controller':'domains','action':'view','domain':'www.groovie.org'}, m.match('/manage/www.groovie.org'))
+        assert m.match('/manage/www.groovie.org') == {'controller':'domains','action':'view','domain':'www.groovie.org'}
 
     def test_default_route(self):
         m = Mapper()
@@ -536,12 +527,12 @@ def test_default_route(self):
         m.connect('',controller='content',action='index')
         m.create_regs(['content'])
 
-        eq_(None, m.match('/x'))
-        eq_(None, m.match('/hello/world'))
-        eq_(None, m.match('/hello/world/how/are'))
-        eq_(None, m.match('/hello/world/how/are/you/today'))
+        assert m.match('/x') is None
+        assert m.match('/hello/world') is None
+        assert m.match('/hello/world/how/are') is None
+        assert m.match('/hello/world/how/are/you/today') is None
 
-        eq_({'controller':'content','action':'index'}, m.match('/'))
+        assert m.match('/') == {'controller':'content','action':'index'}
 
     def test_dynamic_with_prefix(self):
         m = Mapper(explicit=False)
@@ -551,16 +542,16 @@ def test_dynamic_with_prefix(self):
         m.connect('', controller='content', action='index')
         m.create_regs(['content', 'archive', 'admin/comments'])
 
-        eq_(None, m.match('/x'))
-        eq_(None, m.match('/admin/comments'))
-        eq_(None, m.match('/content/view'))
-        eq_(None, m.match('/archive/view/4'))
+        assert m.match('/x') is None
+        assert m.match('/admin/comments') is None
+        assert m.match('/content/view') is None
+        assert m.match('/archive/view/4') is None
 
-        eq_({'controller':'content','action':'index'}, m.match('/blog'))
-        eq_({'controller':'content','action':'index','id':None}, m.match('/blog/content'))
-        eq_({'controller':'admin/comments','action':'view','id':None}, m.match('/blog/admin/comments/view'))
-        eq_({'controller':'archive','action':'index','id':None}, m.match('/blog/archive'))
-        eq_({'controller':'archive','action':'view', 'id':'4'}, m.match('/blog/archive/view/4'))
+        assert m.match('/blog') == {'controller':'content','action':'index'}
+        assert m.match('/blog/content') == {'controller':'content','action':'index','id':None}
+        assert m.match('/blog/admin/comments/view') == {'controller':'admin/comments','action':'view','id':None}
+        assert m.match('/blog/archive') == {'controller':'archive','action':'index','id':None}
+        assert m.match('/blog/archive/view/4') == {'controller':'archive','action':'view', 'id':'4'}
 
     def test_dynamic_with_multiple_and_prefix(self):
         m = Mapper(explicit=False)
@@ -571,17 +562,17 @@ def test_dynamic_with_multiple_and_prefix(self):
         m.connect('', controller='content')
         m.create_regs(['content', 'archive', 'admin/comments'])
 
-        eq_(None, m.match('/x'))
-        eq_(None, m.match('/admin/comments'))
-        eq_(None, m.match('/content/view'))
-        eq_(None, m.match('/archive/view/4'))
+        assert m.match('/x') is None
+        assert m.match('/admin/comments') is None
+        assert m.match('/content/view') is None
+        assert m.match('/archive/view/4') is None
 
-        eq_({'controller':'content', 'action':'index'}, m.match('/blog/'))
-        eq_({'controller':'archive', 'action':'view'}, m.match('/blog/home/view'))
-        eq_({'controller':'content','action':'index','id':None}, m.match('/blog/content'))
-        eq_({'controller':'admin/comments','action':'view','id':None}, m.match('/blog/admin/comments/view'))
-        eq_({'controller':'archive','action':'index','id':None}, m.match('/blog/archive'))
-        eq_({'controller':'archive','action':'view', 'id':'4'}, m.match('/blog/archive/view/4'))
+        assert m.match('/blog/') == {'controller': 'content', 'action': 'index'}
+        assert m.match('/blog/home/view') == {'controller': 'archive', 'action': 'view'}
+        assert m.match('/blog/content') == {'controller': 'content', 'action': 'index', 'id':None}
+        assert m.match('/blog/admin/comments/view') == {'controller': 'admin/comments', 'action': 'view', 'id':None}
+        assert m.match('/blog/archive') == {'controller': 'archive', 'action': 'index', 'id':None}
+        assert m.match('/blog/archive/view/4') == {'controller': 'archive', 'action': 'view', 'id': '4'}
 
 
     def test_splits_with_extension(self):
@@ -590,12 +581,12 @@ def test_splits_with_extension(self):
         m.connect('hi/:(action).html', controller='content')
         m.create_regs([])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/boo/blah'))
-        eq_(None, m.match('/hi/dude/what'))
-        eq_(None, m.match('/hi'))
-        eq_({'controller':'content','action':'index'}, m.match('/hi/index.html'))
-        eq_({'controller':'content','action':'dude'}, m.match('/hi/dude.html'))
+        assert m.match('/boo') is None
+        assert m.match('/boo/blah') is None
+        assert m.match('/hi/dude/what') is None
+        assert m.match('/hi') is None
+        assert m.match('/hi/index.html') == {'controller':'content','action':'index'}
+        assert m.match('/hi/dude.html') == {'controller':'content','action':'dude'}
 
     def test_splits_with_dashes(self):
         m = Mapper()
@@ -603,15 +594,12 @@ def test_splits_with_dashes(self):
         m.connect('archives/:(year)-:(month)-:(day).html', controller='archives', action='view')
         m.create_regs([])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/archives'))
+        assert m.match('/boo') is None
+        assert m.match('/archives') is None
 
-        eq_({'controller':'archives','action':'view','year':'2004','month':'12','day':'4'},
-                         m.match('/archives/2004-12-4.html'))
-        eq_({'controller':'archives','action':'view','year':'04','month':'10','day':'4'},
-                         m.match('/archives/04-10-4.html'))
-        eq_({'controller':'archives','action':'view','year':'04','month':'1','day':'1'},
-                         m.match('/archives/04-1-1.html'))
+        assert m.match('/archives/2004-12-4.html') == {'controller':'archives','action':'view','year':'2004','month':'12','day':'4'}
+        assert m.match('/archives/04-10-4.html') == {'controller':'archives','action':'view','year':'04','month':'10','day':'4'}
+        assert m.match('/archives/04-1-1.html') == {'controller':'archives','action':'view','year':'04','month':'1','day':'1'}
 
     def test_splits_packed_with_regexps(self):
         m = Mapper()
@@ -620,17 +608,14 @@ def test_splits_packed_with_regexps(self):
                requirements=dict(year=r'\d{4}',month=r'\d{2}',day=r'\d{2}'))
         m.create_regs([])
 
-        eq_(None, m.match('/boo'))
-        eq_(None, m.match('/archives'))
-        eq_(None, m.match('/archives/2004020.html'))
-        eq_(None, m.match('/archives/200502.html'))
+        assert m.match('/boo') is None
+        assert m.match('/archives') is None
+        assert m.match('/archives/2004020.html') is None
+        assert m.match('/archives/200502.html') is None
 
-        eq_({'controller':'archives','action':'view','year':'2004','month':'12','day':'04'},
-                      m.match('/archives/20041204.html'))
-        eq_({'controller':'archives','action':'view','year':'2005','month':'10','day':'04'},
-                      m.match('/archives/20051004.html'))
-        eq_({'controller':'archives','action':'view','year':'2006','month':'01','day':'01'},
-                      m.match('/archives/20060101.html'))
+        assert m.match('/archives/20041204.html') == {'controller':'archives','action':'view','year':'2004','month':'12','day':'04'}
+        assert m.match('/archives/20051004.html') == {'controller':'archives','action':'view','year':'2005','month':'10','day':'04'}
+        assert m.match('/archives/20060101.html') == {'controller':'archives','action':'view','year':'2006','month':'01','day':'01'}
 
     def test_splits_with_slashes(self):
         m = Mapper()
@@ -638,13 +623,11 @@ def test_splits_with_slashes(self):
         m.connect(':name/:(action)-:(day)', controller='content')
         m.create_regs([])
 
-        eq_(None, m.match('/something'))
-        eq_(None, m.match('/something/is-'))
+        assert m.match('/something') is None
+        assert m.match('/something/is-') is None
 
-        eq_({'controller':'content','action':'view','day':'3','name':'group'},
-                         m.match('/group/view-3'))
-        eq_({'controller':'content','action':'view','day':'5','name':'group'},
-                         m.match('/group/view-5'))
+        assert m.match('/group/view-3') == {'controller':'content','action':'view','day':'3','name':'group'}
+        assert m.match('/group/view-5') == {'controller':'content','action':'view','day':'5','name':'group'}
 
     def test_splits_with_slashes_and_default(self):
         m = Mapper(explicit=False)
@@ -652,13 +635,11 @@ def test_splits_with_slashes_and_default(self):
         m.connect(':name/:(action)-:(id)', controller='content')
         m.create_regs([])
 
-        eq_(None, m.match('/something'))
-        eq_(None, m.match('/something/is'))
+        assert m.match('/something') is None
+        assert m.match('/something/is') is None
 
-        eq_({'controller':'content','action':'view','id':'3','name':'group'},
-                         m.match('/group/view-3'))
-        eq_({'controller':'content','action':'view','id':None,'name':'group'},
-                         m.match('/group/view-'))
+        assert m.match('/group/view-3') == {'controller':'content','action':'view','id':'3','name':'group'}
+        assert m.match('/group/view-') == {'controller':'content','action':'view','id':None,'name':'group'}
 
     def test_no_reg_make(self):
         m = Mapper()
@@ -666,7 +647,8 @@ def test_no_reg_make(self):
         m.controller_scan = False
         def call_func():
             m.match('/group/view-3')
-        assert_raises(RoutesException, call_func)
+        with pytest.raises(RoutesException):
+            call_func()
 
     def test_routematch(self):
         m = Mapper(explicit=False)
@@ -676,9 +658,9 @@ def test_routematch(self):
         route = m.matchlist[0]
 
         resultdict, route_obj = m.routematch('/content')
-        eq_({'action':'index', 'controller':'content','id':None}, resultdict)
-        eq_(route, route_obj)
-        eq_(None, m.routematch('/nowhere'))
+        assert resultdict == {'action':'index', 'controller':'content','id':None}
+        assert route_obj == route
+        assert m.routematch('/nowhere') is None
 
     def test_routematch_debug(self):
         m = Mapper(explicit=False)
@@ -689,12 +671,12 @@ def test_routematch_debug(self):
         route = m.matchlist[0]
 
         resultdict, route_obj, debug = m.routematch('/content')
-        eq_({'action':'index', 'controller':'content','id':None}, resultdict)
-        eq_(route, route_obj)
+        assert resultdict == {'action':'index', 'controller':'content','id':None}
+        assert route_obj == route
         resultdict, route_obj, debug = m.routematch('/nowhere')
-        eq_(None, resultdict)
-        eq_(None, route_obj)
-        eq_(len(debug), 0)
+        assert resultdict is None
+        assert route_obj is None
+        assert len(debug) == 0
 
     def test_match_debug(self):
         m = Mapper(explicit=False)
@@ -706,12 +688,12 @@ def test_match_debug(self):
         route = m.matchlist[0]
 
         resultdict, route_obj, debug = m.match('/content')
-        eq_({'action':'index', 'controller':'content','id':None}, resultdict)
-        eq_(route, route_obj)
+        assert resultdict == {'action':'index', 'controller':'content','id':None}
+        assert route_obj == route
         resultdict, route_obj, debug = m.match('/nowhere')
-        eq_(None, resultdict)
-        eq_(route_obj, None)
-        eq_(len(debug), 0)
+        assert resultdict is None
+        assert route_obj is None
+        assert len(debug) == 0
 
     def test_conditions(self):
         m = Mapper(explicit=False)
@@ -725,19 +707,19 @@ def test_conditions(self):
         env = dict(PATH_INFO='/nowhere', HTTP_HOST='example.com', REQUEST_METHOD='GET')
         con.mapper_dict = {}
         con.environ = env
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['PATH_INFO'] = '/content'
         con.environ = env
-        eq_({'action':'index','controller':'content','id':None}, con.mapper_dict)
+        assert con.mapper_dict == {'action':'index','controller':'content','id':None}
 
         env['PATH_INFO'] = '/home/upload'
         con.environ = env
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['REQUEST_METHOD'] = 'POST'
         con.environ = env
-        eq_({'action':'upload','controller':'content'}, con.mapper_dict)
+        assert con.mapper_dict == {'action':'upload','controller':'content'}
 
     def test_subdomains(self):
         m = Mapper(explicit=False)
@@ -752,22 +734,19 @@ def test_subdomains(self):
         con.mapper_dict = {}
         con.environ = env
 
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['PATH_INFO'] = '/content'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None}
 
         env['HTTP_HOST'] = 'fred.example.com'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': 'fred', 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': 'fred', 'id': None}
 
         env['HTTP_HOST'] = 'www.example.com'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': 'www', 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': 'www', 'id': None}
 
     def test_subdomains_with_conditions(self):
         m = Mapper(explicit=False)
@@ -782,27 +761,26 @@ def test_subdomains_with_conditions(self):
         con.mapper_dict = {}
         con.environ = env
 
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['PATH_INFO'] = '/content'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None}
 
         m.connect('', controller='users', action='home', conditions={'sub_domain':True})
         m.create_regs(['content', 'users', 'blog'])
         env['PATH_INFO'] = '/'
         con.environ = env
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['HTTP_HOST'] = 'fred.example.com'
         con.environ = env
-        eq_({'action': 'home', 'controller': 'users', 'sub_domain': 'fred'}, con.mapper_dict)
+        assert con.mapper_dict == {'action': 'home', 'controller': 'users', 'sub_domain': 'fred'}
 
         m.sub_domains_ignore = ['www']
         env['HTTP_HOST'] = 'www.example.com'
         con.environ = env
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
     def test_subdomain_with_conditions2(self):
         m = Mapper()
@@ -822,16 +800,16 @@ def test_subdomain_with_conditions2(self):
         con.mapper_dict = {}
         con.environ = env
 
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['PATH_INFO'] = '/admin/comments'
         con.environ = env
-        eq_({'action': 'comments', 'controller':'blog_admin', 'sub_domain': None}, con.mapper_dict)
+        assert con.mapper_dict == {'action': 'comments', 'controller':'blog_admin', 'sub_domain': None}
 
         env['PATH_INFO'] = '/admin/view'
         env['HTTP_HOST'] = 'fred.example.com'
         con.environ = env
-        eq_({'action': 'view', 'controller':'admin', 'sub_domain': 'fred'}, con.mapper_dict)
+        assert con.mapper_dict == {'action': 'view', 'controller':'admin', 'sub_domain': 'fred'}
 
     def test_subdomains_with_ignore(self):
         m = Mapper(explicit=False)
@@ -847,22 +825,19 @@ def test_subdomains_with_ignore(self):
         con.mapper_dict = {}
         con.environ = env
 
-        eq_(None, con.mapper_dict)
+        assert con.mapper_dict is None
 
         env['PATH_INFO'] = '/content'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None}
 
         env['HTTP_HOST'] = 'fred.example.com'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': 'fred', 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': 'fred', 'id': None}
 
         env['HTTP_HOST'] = 'www.example.com'
         con.environ = env
-        eq_({'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None},
-            con.mapper_dict)
+        assert con.mapper_dict == {'action': 'index', 'controller': 'content', 'sub_domain': None, 'id': None}
 
     def test_other_special_chars(self):
         m = Mapper(explicit=False)
@@ -871,19 +846,11 @@ def test_other_special_chars(self):
         m.connect('/error/:action/:id', controller='error')
         m.create_regs(['content'])
 
-        eq_({'year': '2007', 'slug': 'test', 'locale': 'en', 'format': 'html',
-                          'controller': 'content', 'action': 'index'},
-                         m.match('/2007/test'))
-        eq_({'year': '2007', 'slug': 'test', 'format': 'html', 'locale': 'en',
-                          'controller': 'content', 'action': 'index'},
-                         m.match('/2007/test.html'))
-        eq_({'year': '2007', 'slug': 'test',
-                          'format': 'html', 'locale': 'en',
-                          'controller': 'content', 'action': 'index'},
-                         m.match('/2007/test.html,en'))
-        eq_(None, m.match('/2007/test.'))
-        eq_({'controller': 'error', 'action': 'img',
-                          'id': 'icon-16.png'}, m.match('/error/img/icon-16.png'))
+        assert m.match('/2007/test') == {'year': '2007', 'slug': 'test', 'locale': 'en', 'format': 'html', 'controller': 'content', 'action': 'index'}
+        assert m.match('/2007/test.html') == {'year': '2007', 'slug': 'test', 'format': 'html', 'locale': 'en', 'controller': 'content', 'action': 'index'}
+        assert m.match('/2007/test.html,en') == {'year': '2007', 'slug': 'test', 'format': 'html', 'locale': 'en', 'controller': 'content', 'action': 'index'}
+        assert m.match('/2007/test.') is None
+        assert m.match('/error/img/icon-16.png') == {'controller': 'error', 'action': 'img', 'id': 'icon-16.png'}
 
     def test_various_periods(self):
         m = Mapper(explicit=False)
@@ -891,17 +858,13 @@ def test_various_periods(self):
         m.connect('sites/:site/pages/:page')
         m.create_regs(['content'])
 
-        eq_({'action': u'index', 'controller': u'content',
-                          'site': u'python.com', 'page': u'index.html'},
-                         m.match('/sites/python.com/pages/index.html'))
+        assert m.match('/sites/python.com/pages/index.html') == {'action': u'index', 'controller': u'content', 'site': u'python.com', 'page': u'index.html'}
         m = Mapper(explicit=False)
         m.minimization = True
         m.connect('sites/:site/pages/:page.:format', format='html')
         m.create_regs(['content'])
 
-        eq_({'action': u'index', 'controller': u'content',
-                          'site': u'python.com', 'page': u'index', 'format': u'html'},
-                         m.match('/sites/python.com/pages/index.html'))
+        assert m.match('/sites/python.com/pages/index.html') == {'action': u'index', 'controller': u'content', 'site': u'python.com', 'page': u'index', 'format': u'html'}
 
     def test_empty_fails(self):
         m = Mapper(explicit=False)
@@ -910,11 +873,12 @@ def test_empty_fails(self):
         m.connect('', controller='content', action='view', id=4)
         m.create_regs(['content'])
 
-        eq_({'controller':'content','action':'index','id':None}, m.match('/content'))
-        eq_({'controller':'content','action':'view','id':'4'}, m.match('/'))
+        assert m.match('/content') == {'controller':'content','action':'index','id':None}
+        assert m.match('/') == {'controller':'content','action':'view','id':'4'}
         def call_func():
             m.match(None)
-        assert_raises(RoutesException, call_func)
+        with pytest.raises(RoutesException):
+            call_func()
 
     def test_home_noargs(self):
         m = Mapper(controller_scan=None, directory=None, always_scan=False)
@@ -923,11 +887,12 @@ def test_home_noargs(self):
         m.connect('')
         m.create_regs([])
 
-        eq_(None, m.match('/content'))
-        eq_({}, m.match('/'))
+        assert m.match('/content') is None
+        assert m.match('/') == {}
         def call_func():
             m.match(None)
-        assert_raises(RoutesException, call_func)
+        with pytest.raises(RoutesException):
+            call_func()
 
     def test_dot_format_args(self):
         for minimization in [False, True]:
@@ -936,11 +901,11 @@ def test_dot_format_args(self):
             m.connect('/songs/{title}{.format}')
             m.connect('/stories/{slug:[^./]+?}{.format:pdf}')
 
-            eq_({'title': 'my-way', 'format': None}, m.match('/songs/my-way'))
-            eq_({'title': 'my-way', 'format': 'mp3'}, m.match('/songs/my-way.mp3'))
-            eq_({'slug': 'frist-post', 'format': None}, m.match('/stories/frist-post'))
-            eq_({'slug': 'frist-post', 'format': 'pdf'}, m.match('/stories/frist-post.pdf'))
-            eq_(None, m.match('/stories/frist-post.doc'))
+            assert m.match('/songs/my-way') == {'title': 'my-way', 'format': None}
+            assert m.match('/songs/my-way.mp3') == {'title': 'my-way', 'format': 'mp3'}
+            assert m.match('/stories/frist-post') == {'slug': 'frist-post', 'format': None}
+            assert m.match('/stories/frist-post.pdf') == {'slug': 'frist-post', 'format': 'pdf'}
+            assert m.match('/stories/frist-post.doc') is None
 
 
 if __name__ == '__main__':
diff --git a/tests/test_functional/test_resources.py b/tests/test_functional/test_resources.py
index 0855cd5..bc373cc 100644
--- a/tests/test_functional/test_resources.py
+++ b/tests/test_functional/test_resources.py
@@ -1,22 +1,22 @@
 """test_resources"""
 import unittest
-from nose.tools import eq_, assert_raises
+import pytest
 
 from routes import *
 
 class TestResourceGeneration(unittest.TestCase):
     def _assert_restful_routes(self, m, options, path_prefix=''):
         baseroute = '/' + path_prefix + options['controller']
-        eq_(baseroute, m.generate(action='index', **options))
-        eq_(baseroute + '.xml', m.generate(action='index', format='xml', **options))
-        eq_(baseroute + '/new', m.generate(action='new', **options))
-        eq_(baseroute + '/1', m.generate(action='show', id='1', **options))
-        eq_(baseroute + '/1/edit', m.generate(action='edit',id='1', **options))
-        eq_(baseroute + '/1.xml', m.generate(action='show', id='1',format='xml', **options))
+        assert m.generate(action='index', **options) == baseroute
+        assert m.generate(action='index', format='xml', **options) == baseroute + '.xml'
+        assert m.generate(action='new', **options) == baseroute + '/new'
+        assert m.generate(action='show', id='1', **options) == baseroute + '/1'
+        assert m.generate(action='edit', id='1', **options) == baseroute + '/1/edit'
+        assert m.generate(action='show', id='1', format='xml', **options) == baseroute + '/1.xml'
 
-        eq_(baseroute, m.generate(action='create', method='post', **options))
-        eq_(baseroute + '/1', m.generate(action='update', method='put', id='1', **options))
-        eq_(baseroute + '/1', m.generate(action='delete', method='delete', id='1', **options))
+        assert m.generate(action='create', method='post', **options) == baseroute
+        assert m.generate(action='update', method='put', id='1', **options) == baseroute + '/1'
+        assert m.generate(action='delete', method='delete', id='1', **options) == baseroute + '/1'
 
     def test_resources(self):
         m = Mapper()
@@ -25,14 +25,14 @@ def test_resources(self):
         m.resource('passage', 'passages')
         m.create_regs(['messages'])
         options = dict(controller='messages')
-        eq_('/messages', url_for('messages'))
-        eq_('/messages.xml', url_for('formatted_messages', format='xml'))
-        eq_('/messages/1', url_for('message', id=1))
-        eq_('/messages/1.xml', url_for('formatted_message', id=1, format='xml'))
-        eq_('/messages/new', url_for('new_message'))
-        eq_('/messages/1.xml', url_for('formatted_message', id=1, format='xml'))
-        eq_('/messages/1/edit', url_for('edit_message', id=1))
-        eq_('/messages/1/edit.xml', url_for('formatted_edit_message', id=1, format='xml'))
+        assert url_for('messages') == '/messages'
+        assert url_for('formatted_messages', format='xml') == '/messages.xml'
+        assert url_for('message', id=1) == '/messages/1'
+        assert url_for('formatted_message', id=1, format='xml') == '/messages/1.xml'
+        assert url_for('new_message') == '/messages/new'
+        assert url_for('formatted_message', id=1, format='xml') == '/messages/1.xml'
+        assert url_for('edit_message', id=1) == '/messages/1/edit'
+        assert url_for('formatted_edit_message', id=1, format='xml') == '/messages/1/edit.xml'
         self._assert_restful_routes(m, options)
 
     def test_resources_with_path_prefix(self):
@@ -48,10 +48,10 @@ def test_resources_with_collection_action(self):
         m.create_regs(['messages'])
         options = dict(controller='messages')
         self._assert_restful_routes(m, options)
-        eq_('/messages/rss', m.generate(controller='messages', action='rss'))
-        eq_('/messages/rss', url_for('rss_messages'))
-        eq_('/messages/rss.xml', m.generate(controller='messages', action='rss', format='xml'))
-        eq_('/messages/rss.xml', url_for('formatted_rss_messages', format='xml'))
+        assert m.generate(controller='messages', action='rss') == '/messages/rss'
+        assert url_for('rss_messages') == '/messages/rss'
+        assert m.generate(controller='messages', action='rss', format='xml') == '/messages/rss.xml'
+        assert url_for('formatted_rss_messages', format='xml') == '/messages/rss.xml'
 
     def test_resources_with_member_action(self):
         for method in ['put', 'post']:
@@ -60,9 +60,8 @@ def test_resources_with_member_action(self):
             m.create_regs(['messages'])
             options = dict(controller='messages')
             self._assert_restful_routes(m, options)
-            eq_('/messages/1/mark', m.generate(method=method, action='mark', id='1', **options))
-            eq_('/messages/1/mark.xml',
-                m.generate(method=method, action='mark', id='1', format='xml', **options))
+            assert m.generate(method=method, action='mark', id='1', **options) == '/messages/1/mark'
+            assert m.generate(method=method, action='mark', id='1', format='xml', **options) == '/messages/1/mark.xml'
 
     def test_resources_with_new_action(self):
         m = Mapper()
@@ -70,11 +69,10 @@ def test_resources_with_new_action(self):
         m.create_regs(['messages'])
         options = dict(controller='messages')
         self._assert_restful_routes(m, options)
-        eq_('/messages/new/preview', m.generate(controller='messages', action='preview', method='post'))
-        eq_('/messages/new/preview', url_for('preview_new_message'))
-        eq_('/messages/new/preview.xml',
-            m.generate(controller='messages', action='preview', method='post', format='xml'))
-        eq_('/messages/new/preview.xml', url_for('formatted_preview_new_message', format='xml'))
+        assert m.generate(controller='messages', action='preview', method='post') == '/messages/new/preview'
+        assert url_for('preview_new_message') == '/messages/new/preview'
+        assert m.generate(controller='messages', action='preview', method='post', format='xml') == '/messages/new/preview.xml'
+        assert url_for('formatted_preview_new_message', format='xml') == '/messages/new/preview.xml'
 
     def test_resources_with_name_prefix(self):
         m = Mapper()
@@ -82,8 +80,9 @@ def test_resources_with_name_prefix(self):
         m.create_regs(['messages'])
         options = dict(controller='messages')
         self._assert_restful_routes(m, options)
-        eq_('/messages/new/preview', url_for('category_preview_new_message'))
-        assert_raises(Exception, url_for, 'category_preview_new_message', method='get')
+        assert url_for('category_preview_new_message') == '/messages/new/preview'
+        with pytest.raises(Exception):
+            url_for('category_preview_new_message', method='get')
 
     def test_resources_with_requirements(self):
         m = Mapper()
@@ -94,11 +93,10 @@ def test_resources_with_requirements(self):
 
         # in addition to the positive tests we need to guarantee we
         # are not matching when the requirements don't match.
-        eq_({'action': u'create', 'project_id': u'cafe', 'user_id': u'123', 'controller': u'messages'},
-            m.match('/cafe/123/messages'))
-        eq_(None, m.match('/extensions/123/messages'))
-        eq_(None, m.match('/b0a3/123b/messages'))
-        eq_(None, m.match('/foo/bar/messages'))
+        assert m.match('/cafe/123/messages') == {'action': u'create', 'project_id': u'cafe', 'user_id': u'123', 'controller': u'messages'}
+        assert m.match('/extensions/123/messages') is None
+        assert m.match('/b0a3/123b/messages') is None
+        assert m.match('/foo/bar/messages') is None
 
 
 class TestResourceRecognition(unittest.TestCase):
@@ -115,54 +113,54 @@ def test_path(path, method):
             con.environ = env
 
         test_path('/people', 'GET')
-        eq_({'controller':'people', 'action':'index'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'index'}
         test_path('/people.xml', 'GET')
-        eq_({'controller':'people', 'action':'index', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'index', 'format':'xml'}
 
         test_path('/people', 'POST')
-        eq_({'controller':'people', 'action':'create'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'create'}
         test_path('/people.html', 'POST')
-        eq_({'controller':'people', 'action':'create', 'format':'html'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'create', 'format':'html'}
 
         test_path('/people/2.xml', 'GET')
-        eq_({'controller':'people', 'action':'show', 'id':'2', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'show', 'id':'2', 'format':'xml'}
         test_path('/people/2', 'GET')
-        eq_({'controller':'people', 'action':'show', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'show', 'id':'2'}
 
         test_path('/people/2/edit', 'GET')
-        eq_({'controller':'people', 'action':'edit', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'edit', 'id':'2'}
         test_path('/people/2/edit.xml', 'GET')
-        eq_({'controller':'people', 'action':'edit', 'id':'2', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'edit', 'id':'2', 'format':'xml'}
 
         test_path('/people/2', 'DELETE')
-        eq_({'controller':'people', 'action':'delete', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'delete', 'id':'2'}
 
         test_path('/people/2', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'2'}, con.mapper_dict        )
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'2'}
         test_path('/people/2.json', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'2', 'format':'json'}, con.mapper_dict        )
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'2', 'format':'json'}
 
         # Test for dots in urls
         test_path('/people/2\.13', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'2\.13'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'2\.13'}
         test_path('/people/2\.13.xml', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'2\.13', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'2\.13', 'format':'xml'}
         test_path('/people/user\.name', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name'}
         test_path('/people/user\.\.\.name', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.\.\.name'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.\.\.name'}
         test_path('/people/user\.name\.has\.dots', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name\.has\.dots'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name\.has\.dots'}
         test_path('/people/user\.name\.is\.something.xml', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name\.is\.something', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name\.is\.something', 'format':'xml'}
         test_path('/people/user\.name\.ends\.with\.dot\..xml', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name\.ends\.with\.dot\.', 'format':'xml'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name\.ends\.with\.dot\.', 'format':'xml'}
         test_path('/people/user\.name\.ends\.with\.dot\.', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name\.ends\.with\.dot\.'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name\.ends\.with\.dot\.'}
         test_path('/people/\.user\.name\.starts\.with\.dot', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'\.user\.name\.starts\.with\.dot'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'\.user\.name\.starts\.with\.dot'}
         test_path('/people/user\.name.json', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'user\.name', 'format':'json'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'user\.name', 'format':'json'}
 
     def test_resource_with_nomin(self):
         m = Mapper()
@@ -178,21 +176,21 @@ def test_path(path, method):
             con.environ = env
 
         test_path('/people', 'GET')
-        eq_({'controller':'people', 'action':'index'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'index'}
 
         test_path('/people', 'POST')
-        eq_({'controller':'people', 'action':'create'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'create'}
 
         test_path('/people/2', 'GET')
-        eq_({'controller':'people', 'action':'show', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'show', 'id':'2'}
         test_path('/people/2/edit', 'GET')
-        eq_({'controller':'people', 'action':'edit', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'edit', 'id':'2'}
 
         test_path('/people/2', 'DELETE')
-        eq_({'controller':'people', 'action':'delete', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'delete', 'id':'2'}
 
         test_path('/people/2', 'PUT')
-        eq_({'controller':'people', 'action':'update', 'id':'2'}, con.mapper_dict)
+        assert con.mapper_dict == {'controller':'people', 'action':'update', 'id':'2'}
 
     def test_resource_created_with_parent_resource(self):
         m = Mapper()
@@ -210,44 +208,38 @@ def test_path(path, method):
             con.environ = env
 
         test_path('/regions/13/locations', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'action': 'index'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'action': 'index'}
         url = url_for('region_locations', region_id=13)
-        eq_(url, '/regions/13/locations')
+        assert url == '/regions/13/locations'
 
         test_path('/regions/13/locations', 'POST')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'action': 'create'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'action': 'create'}
         # new
         url = url_for('region_new_location', region_id=13)
-        eq_(url, '/regions/13/locations/new')
+        assert url == '/regions/13/locations/new'
         # create
         url = url_for('region_locations', region_id=13)
-        eq_(url, '/regions/13/locations')
+        assert url == '/regions/13/locations'
 
         test_path('/regions/13/locations/60', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'show'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'show'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         test_path('/regions/13/locations/60/edit', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'edit'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'edit'}
         url = url_for('region_edit_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60/edit')
+        assert url == '/regions/13/locations/60/edit'
 
         test_path('/regions/13/locations/60', 'DELETE')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'delete'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'delete'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         test_path('/regions/13/locations/60', 'PUT')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'update'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'update'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         # Make sure ``path_prefix`` overrides work
         # empty ``path_prefix`` (though I'm not sure why someone would do this)
@@ -257,7 +249,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    path_prefix='')
         url = url_for('region_locations')
-        eq_(url, '/locations')
+        assert url == '/locations'
         # different ``path_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -265,7 +257,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    path_prefix='areas/:area_id')
         url = url_for('region_locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
 
         # Make sure ``name_prefix`` overrides work
         # empty ``name_prefix``
@@ -275,7 +267,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    name_prefix='')
         url = url_for('locations', region_id=51)
-        eq_(url, '/regions/51/locations')
+        assert url == '/regions/51/locations'
         # different ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -283,7 +275,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    name_prefix='area_')
         url = url_for('area_locations', region_id=51)
-        eq_(url, '/regions/51/locations')
+        assert url == '/regions/51/locations'
 
         # Make sure ``path_prefix`` and ``name_prefix`` overrides work together
         # empty ``path_prefix``
@@ -294,7 +286,7 @@ def test_path(path, method):
                    path_prefix='',
                    name_prefix='place_')
         url = url_for('place_locations')
-        eq_(url, '/locations')
+        assert url == '/locations'
         # empty ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -303,7 +295,7 @@ def test_path(path, method):
                    path_prefix='areas/:area_id',
                    name_prefix='')
         url = url_for('locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
         # different ``path_prefix`` and ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -312,7 +304,7 @@ def test_path(path, method):
                    path_prefix='areas/:area_id',
                    name_prefix='place_')
         url = url_for('place_locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
 
     def test_resource_created_with_parent_resource_nomin(self):
         m = Mapper()
@@ -331,44 +323,38 @@ def test_path(path, method):
             con.environ = env
 
         test_path('/regions/13/locations', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'action': 'index'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'action': 'index'}
         url = url_for('region_locations', region_id=13)
-        eq_(url, '/regions/13/locations')
+        assert url == '/regions/13/locations'
 
         test_path('/regions/13/locations', 'POST')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'action': 'create'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'action': 'create'}
         # new
         url = url_for('region_new_location', region_id=13)
-        eq_(url, '/regions/13/locations/new')
+        assert url == '/regions/13/locations/new'
         # create
         url = url_for('region_locations', region_id=13)
-        eq_(url, '/regions/13/locations')
+        assert url == '/regions/13/locations'
 
         test_path('/regions/13/locations/60', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'show'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'show'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         test_path('/regions/13/locations/60/edit', 'GET')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'edit'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'edit'}
         url = url_for('region_edit_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60/edit')
+        assert url == '/regions/13/locations/60/edit'
 
         test_path('/regions/13/locations/60', 'DELETE')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'delete'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'delete'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         test_path('/regions/13/locations/60', 'PUT')
-        eq_(con.mapper_dict, {'region_id': '13', 'controller': 'locations',
-                                   'id': '60', 'action': 'update'})
+        assert con.mapper_dict == {'region_id': '13', 'controller': 'locations', 'id': '60', 'action': 'update'}
         url = url_for('region_location', region_id=13, id=60)
-        eq_(url, '/regions/13/locations/60')
+        assert url == '/regions/13/locations/60'
 
         # Make sure ``path_prefix`` overrides work
         # empty ``path_prefix`` (though I'm not sure why someone would do this)
@@ -378,7 +364,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    path_prefix='/')
         url = url_for('region_locations')
-        eq_(url, '/locations')
+        assert url == '/locations'
         # different ``path_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -386,7 +372,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    path_prefix='areas/:area_id')
         url = url_for('region_locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
 
         # Make sure ``name_prefix`` overrides work
         # empty ``name_prefix``
@@ -396,7 +382,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    name_prefix='')
         url = url_for('locations', region_id=51)
-        eq_(url, '/regions/51/locations')
+        assert url == '/regions/51/locations'
         # different ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -404,7 +390,7 @@ def test_path(path, method):
                                         collection_name='regions'),
                    name_prefix='area_')
         url = url_for('area_locations', region_id=51)
-        eq_(url, '/regions/51/locations')
+        assert url == '/regions/51/locations'
 
         # Make sure ``path_prefix`` and ``name_prefix`` overrides work together
         # empty ``path_prefix``
@@ -415,7 +401,7 @@ def test_path(path, method):
                    path_prefix='',
                    name_prefix='place_')
         url = url_for('place_locations')
-        eq_(url, '/locations')
+        assert url == '/locations'
         # empty ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -424,7 +410,7 @@ def test_path(path, method):
                    path_prefix='areas/:area_id',
                    name_prefix='')
         url = url_for('locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
         # different ``path_prefix`` and ``name_prefix``
         m = Mapper()
         m.resource('location', 'locations',
@@ -433,7 +419,7 @@ def test_path(path, method):
                    path_prefix='areas/:area_id',
                    name_prefix='place_')
         url = url_for('place_locations', area_id=51)
-        eq_(url, '/areas/51/locations')
+        assert url == '/areas/51/locations'
 
 
 
diff --git a/tests/test_functional/test_submapper.py b/tests/test_functional/test_submapper.py
index 8821de9..46eca90 100644
--- a/tests/test_functional/test_submapper.py
+++ b/tests/test_functional/test_submapper.py
@@ -1,6 +1,6 @@
 """test_resources"""
 import unittest
-from nose.tools import eq_, assert_raises
+import pytest
 
 from routes import *
 
@@ -10,14 +10,15 @@ def test_submapper(self):
         c = m.submapper(path_prefix='/entries', requirements=dict(id='\d+'))
         c.connect('entry', '/{id}')
 
-        eq_('/entries/1', url_for('entry', id=1))
-        assert_raises(Exception, url_for, 'entry', id='foo')
+        assert url_for('entry', id=1) == '/entries/1'
+        with pytest.raises(Exception):
+            url_for('entry', id='foo')
 
     def test_submapper_with_no_path(self):
         m = Mapper()
         c = m.submapper(path_prefix='/')
         c.connect('entry')
-        eq_('/entry?id=1', url_for('entry', id=1))
+        assert url_for('entry', id=1) == '/entry?id=1'
 
     def test_submapper_nesting(self):
         m = Mapper()
@@ -25,15 +26,16 @@ def test_submapper_nesting(self):
                         requirements=dict(id='\d+'))
         e = c.submapper(path_prefix='/{id}')
 
-        eq_('entry', c.resource_name)
-        eq_('entry', e.resource_name)
+        assert c.resource_name == 'entry'
+        assert e.resource_name == 'entry'
 
         e.connect('entry', '')
         e.connect('edit_entry', '/edit')
 
-        eq_('/entries/1', url_for('entry', id=1))
-        eq_('/entries/1/edit', url_for('edit_entry', id=1))
-        assert_raises(Exception, url_for, 'entry', id='foo')
+        assert url_for('entry', id=1) == '/entries/1'
+        assert url_for('edit_entry', id=1) == '/entries/1/edit'
+        with pytest.raises(Exception):
+            url_for('entry', id='foo')
 
     def test_submapper_action(self):
         m = Mapper(explicit=True)
@@ -42,11 +44,12 @@ def test_submapper_action(self):
         c.action(name='entries', action='list')
         c.action(action='create', method='POST')
 
-        eq_('/entries', url_for('entries', method='GET'))
-        eq_('/entries', url_for('create_entry', method='POST'))
-        eq_('/entries', url_for(controller='entry', action='list', method='GET'))
-        eq_('/entries', url_for(controller='entry', action='create', method='POST'))
-        assert_raises(Exception, url_for, 'entries', method='DELETE')
+        assert url_for('entries', method='GET') == '/entries'
+        assert url_for('create_entry', method='POST') == '/entries'
+        assert url_for(controller='entry', action='list', method='GET') == '/entries'
+        assert url_for(controller='entry', action='create', method='POST') == '/entries'
+        with pytest.raises(Exception):
+            url_for('entries', method='DELETE')
 
     def test_submapper_link(self):
         m = Mapper(explicit=True)
@@ -55,12 +58,14 @@ def test_submapper_link(self):
         c.link(rel='new')
         c.link(rel='ping', method='POST')
 
-        eq_('/entries/new', url_for('new_entry', method='GET'))
-        eq_('/entries/ping', url_for('ping_entry', method='POST'))
-        eq_('/entries/new', url_for(controller='entry', action='new', method='GET'))
-        eq_('/entries/ping', url_for(controller='entry', action='ping', method='POST'))
-        assert_raises(Exception, url_for, 'new_entry', method='PUT')
-        assert_raises(Exception, url_for, 'ping_entry', method='PUT')
+        assert url_for('new_entry', method='GET') == '/entries/new'
+        assert url_for('ping_entry', method='POST') == '/entries/ping'
+        assert url_for(controller='entry', action='new', method='GET') == '/entries/new'
+        assert url_for(controller='entry', action='ping', method='POST') == '/entries/ping'
+        with pytest.raises(Exception):
+            url_for('new_entry', method='PUT')
+        with pytest.raises(Exception):
+            url_for('ping_entry', method='PUT')
 
     def test_submapper_standard_actions(self):
         m = Mapper()
@@ -74,14 +79,16 @@ def test_submapper_standard_actions(self):
         e.update()
         e.delete()
 
-        eq_('/entries', url_for('entries', method='GET'))
-        eq_('/entries', url_for('create_entry', method='POST'))
-        assert_raises(Exception, url_for, 'entries', method='DELETE')
+        assert url_for('entries', method='GET') == '/entries'
+        assert url_for('create_entry', method='POST') == '/entries'
+        with pytest.raises(Exception):
+            url_for('entries', method='DELETE')
 
-        eq_('/entries/1', url_for('entry', id=1, method='GET'))
-        eq_('/entries/1', url_for('update_entry', id=1, method='PUT'))
-        eq_('/entries/1', url_for('delete_entry', id=1, method='DELETE'))
-        assert_raises(Exception, url_for, 'entry', id=1, method='POST')
+        assert url_for('entry', id=1, method='GET') == '/entries/1'
+        assert url_for('update_entry', id=1, method='PUT') == '/entries/1'
+        assert url_for('delete_entry', id=1, method='DELETE') == '/entries/1'
+        with pytest.raises(Exception):
+            url_for('entry', id=1, method='POST')
 
     def test_submapper_standard_links(self):
         m = Mapper()
@@ -91,11 +98,13 @@ def test_submapper_standard_links(self):
         c.new()
         e.edit()
 
-        eq_('/entries/new', url_for('new_entry', method='GET'))
-        assert_raises(Exception, url_for, 'new_entry', method='POST')
+        assert url_for('new_entry', method='GET') == '/entries/new'
+        with pytest.raises(Exception):
+            url_for('new_entry', method='POST')
 
-        eq_('/entries/1/edit', url_for('edit_entry', id=1, method='GET'))
-        assert_raises(Exception, url_for, 'edit_entry', id=1, method='POST')
+        assert url_for('edit_entry', id=1, method='GET') == '/entries/1/edit'
+        with pytest.raises(Exception):
+            url_for('edit_entry', id=1, method='POST')
 
     def test_submapper_action_and_link_generation(self):
         m = Mapper()
@@ -105,39 +114,47 @@ def test_submapper_action_and_link_generation(self):
         e = c.submapper(path_prefix='/{id}',
                        actions=['show', 'edit', 'update', 'delete'])
 
-        eq_('/entries', url_for('entries', method='GET'))
-        eq_('/entries', url_for('create_entry', method='POST'))
-        assert_raises(Exception, url_for, 'entries', method='DELETE')
+        assert url_for('entries', method='GET') == '/entries'
+        assert url_for('create_entry', method='POST') == '/entries'
+        with pytest.raises(Exception):
+            url_for('entries', method='DELETE')
 
-        eq_('/entries/1', url_for('entry', id=1, method='GET'))
-        eq_('/entries/1', url_for('update_entry', id=1, method='PUT'))
-        eq_('/entries/1', url_for('delete_entry', id=1, method='DELETE'))
-        assert_raises(Exception, url_for, 'entry', id=1, method='POST')
+        assert url_for('entry', id=1, method='GET') == '/entries/1'
+        assert url_for('update_entry', id=1, method='PUT') == '/entries/1'
+        assert url_for('delete_entry', id=1, method='DELETE') == '/entries/1'
+        with pytest.raises(Exception):
+            url_for('entry', id=1, method='POST')
 
-        eq_('/entries/new', url_for('new_entry', method='GET'))
-        assert_raises(Exception, url_for, 'new_entry', method='POST')
+        assert url_for('new_entry', method='GET') == '/entries/new'
+        with pytest.raises(Exception):
+            url_for('new_entry', method='POST')
 
-        eq_('/entries/1/edit', url_for('edit_entry', id=1, method='GET'))
-        assert_raises(Exception, url_for, 'edit_entry', id=1, method='POST')
+        assert url_for('edit_entry', id=1, method='GET') == '/entries/1/edit'
+        with pytest.raises(Exception):
+            url_for('edit_entry', id=1, method='POST')
 
     def test_collection(self):
         m = Mapper()
         c = m.collection('entries', 'entry')
 
-        eq_('/entries', url_for('entries', method='GET'))
-        eq_('/entries', url_for('create_entry', method='POST'))
-        assert_raises(Exception, url_for, 'entries', method='DELETE')
+        assert url_for('entries', method='GET') == '/entries'
+        assert url_for('create_entry', method='POST') == '/entries'
+        with pytest.raises(Exception):
+            url_for('entries', method='DELETE')
 
-        eq_('/entries/1', url_for('entry', id=1, method='GET'))
-        eq_('/entries/1', url_for('update_entry', id=1, method='PUT'))
-        eq_('/entries/1', url_for('delete_entry', id=1, method='DELETE'))
-        assert_raises(Exception, url_for, 'entry', id=1, method='POST')
+        assert url_for('entry', id=1, method='GET') == '/entries/1'
+        assert url_for('update_entry', id=1, method='PUT') == '/entries/1'
+        assert url_for('delete_entry', id=1, method='DELETE') == '/entries/1'
+        with pytest.raises(Exception):
+            url_for('entry', id=1, method='POST')
 
-        eq_('/entries/new', url_for('new_entry', method='GET'))
-        assert_raises(Exception, url_for, 'new_entry', method='POST')
+        assert url_for('new_entry', method='GET') == '/entries/new'
+        with pytest.raises(Exception):
+            url_for('new_entry', method='POST')
 
-        eq_('/entries/1/edit', url_for('edit_entry', id=1, method='GET'))
-        assert_raises(Exception, url_for, 'edit_entry', id=1, method='POST')
+        assert url_for('edit_entry', id=1, method='GET') == '/entries/1/edit'
+        with pytest.raises(Exception):
+            url_for('edit_entry', id=1, method='POST')
 
     def test_collection_options(self):
         m = Mapper()
@@ -145,8 +162,8 @@ def test_collection_options(self):
         c = m.collection('entries', 'entry', conditions=dict(sub_domain=True),
                          requirements=requirement)
         for r in m.matchlist:
-            eq_(True, r.conditions['sub_domain'])
-            eq_(requirement, r.reqs)
+            assert r.conditions['sub_domain'] is True
+            assert r.reqs == requirement
 
     def test_subsubmapper_with_controller(self):
         m = Mapper()
@@ -158,7 +175,7 @@ def test_subsubmapper_with_controller(self):
                                       controller='col2',
                                       member_prefix='/{child_id}')
         match = m.match('/parents/1/children/2')
-        eq_('col2', match.get('controller'))
+        assert match.get('controller') == 'col2'
 
     def test_submapper_argument_overriding(self):
         m = Mapper()
@@ -177,25 +194,24 @@ def test_submapper_argument_overriding(self):
 
         # test first level
         match = m.match('/first_level/test')
-        eq_('first', match.get('controller'))
-        eq_('test', match.get('action'))
+        assert match.get('controller') == 'first'
+        assert match.get('action') == 'test'
         # test name_prefix worked
-        eq_('/first_level/test', url_for('first_test'))
+        assert url_for('first_test') == '/first_level/test'
 
         # test second level controller override
         match = m.match('/first_level/second_level/test')
-        eq_('second', match.get('controller'))
-        eq_('test', match.get('action'))
+        assert match.get('controller') == 'second'
+        assert match.get('action') == 'test'
         # test name_prefix worked
-        eq_('/first_level/second_level/test', url_for('first_second_test'))
+        assert url_for('first_second_test') == '/first_level/second_level/test'
 
         # test third level controller and action override
         match = m.match('/first_level/second_level/third_level/test')
-        eq_('third', match.get('controller'))
-        eq_('third_action', match.get('action'))
+        assert match.get('controller') == 'third'
+        assert match.get('action') == 'third_action'
         # test name_prefix worked
-        eq_('/first_level/second_level/third_level/test',
-             url_for('first_second_third_test'))
+        assert url_for('first_second_third_test') == '/first_level/second_level/third_level/test'
 
 
 if __name__ == '__main__':
diff --git a/tests/test_functional/test_utils.py b/tests/test_functional/test_utils.py
index e2a6a04..d7b03a2 100644
--- a/tests/test_functional/test_utils.py
+++ b/tests/test_functional/test_utils.py
@@ -1,7 +1,7 @@
 """test_utils"""
 import os, sys, time, unittest
-from nose.tools import eq_, assert_raises
 
+import pytest
 from routes.util import controller_scan, GenerationException
 from routes import *
 
@@ -25,32 +25,32 @@ def test_url_for_with_nongen(self):
         con = self.con
         con.mapper_dict = {}
 
-        eq_('/blog', url_for('/blog'))
-        eq_('/blog?q=fred&q=here%20now', url_for('/blog', q=['fred', u'here now']))
-        eq_('/blog#here', url_for('/blog', anchor='here'))
+        assert url_for('/blog') == '/blog'
+        assert url_for('/blog', q=['fred', u'here now']) == '/blog?q=fred&q=here%20now'
+        assert url_for('/blog', anchor='here') == '/blog#here'
 
     def test_url_for_with_nongen_no_encoding(self):
         con = self.con
         con.mapper_dict = {}
         con.mapper.encoding = None
 
-        eq_('/blog', url_for('/blog'))
-        eq_('/blog#here', url_for('/blog', anchor='here'))
+        assert url_for('/blog') == '/blog'
+        assert url_for('/blog', anchor='here') == '/blog#here'
 
     def test_url_for_with_unicode(self):
         con = self.con
         con.mapper_dict = {}
 
-        eq_('/blog', url_for(controller='blog'))
-        eq_('/blog/view/umulat', url_for(controller='blog', action='view', id=u'umulat'))
-        eq_('/blog/view/umulat?other=%CE%B1%CF%83%CE%B4%CE%B3',
-            url_for(controller='blog', action='view', id=u'umulat', other=u'\u03b1\u03c3\u03b4\u03b3'))
+        assert url_for(controller='blog') == '/blog'
+        assert url_for(controller='blog', action='view', id=u'umulat') == '/blog/view/umulat'
+        assert url_for(controller='blog', action='view', id=u'umulat', other=u'\u03b1\u03c3\u03b4\u03b3') == '/blog/view/umulat?other=%CE%B1%CF%83%CE%B4%CE%B3'
 
         url = URLGenerator(con.mapper, {})
         for urlobj in [url_for, url]:
             def raise_url():
                 return urlobj(u'/some/st\xc3rng')
-            assert_raises(Exception, raise_url)
+            with pytest.raises(Exception):
+                raise_url()
 
     def test_url_for(self):
         con = self.con
@@ -58,73 +58,75 @@ def test_url_for(self):
         url = URLGenerator(con.mapper, {'HTTP_HOST':'www.test.com:80'})
 
         for urlobj in [url_for, url]:
-            eq_('/blog', urlobj(controller='blog'))
-            eq_('/content', urlobj())
-            eq_('https://www.test.com/viewpost', urlobj(controller='post', action='view', protocol='https'))
-            eq_('http://www.test.org/content', urlobj(host='www.test.org'))
-            eq_('//www.test.com/viewpost', urlobj(controller='post', action='view', protocol=''))
-            eq_('//www.test.org/content', urlobj(host='www.test.org', protocol=''))
+            assert urlobj(controller='blog') == '/blog'
+            assert urlobj() == '/content'
+            assert urlobj(controller='post', action='view', protocol='https') == 'https://www.test.com/viewpost'
+            assert urlobj(host='www.test.org') == 'http://www.test.org/content'
+            assert urlobj(controller='post', action='view', protocol='') == '//www.test.com/viewpost'
+            assert urlobj(host='www.test.org', protocol='') == '//www.test.org/content'
 
     def test_url_raises(self):
         con = self.con
         con.mapper.explicit = True
         con.mapper_dict = {}
         url = URLGenerator(con.mapper, {})
-        assert_raises(GenerationException, url_for, action='juice')
-        assert_raises(GenerationException, url, action='juice')
+        with pytest.raises(GenerationException):
+            url_for(action='juice')
+        with pytest.raises(GenerationException):
+            url(action='juice')
 
     def test_url_for_with_defaults(self):
         con = self.con
         con.mapper_dict = {'controller':'blog','action':'view','id':4}
         url = URLGenerator(con.mapper, {'wsgiorg.routing_args':((), con.mapper_dict)})
 
-        eq_('/blog/view/4', url_for())
-        eq_('/post/index/4', url_for(controller='post'))
-        eq_('/blog/view/2', url_for(id=2))
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        assert url_for() == '/blog/view/4'
+        assert url_for(controller='post') == '/post/index/4'
+        assert url_for(id=2) == '/blog/view/2'
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
-        eq_('/blog/view/4', url.current())
-        eq_('/post/index/4', url.current(controller='post'))
-        eq_('/blog/view/2', url.current(id=2))
-        eq_('/viewpost/4', url.current(controller='post', action='view', id=4))
+        assert url.current() == '/blog/view/4'
+        assert url.current(controller='post') == '/post/index/4'
+        assert url.current(id=2) == '/blog/view/2'
+        assert url.current(controller='post', action='view', id=4) == '/viewpost/4'
 
         con.mapper_dict = {'controller':'blog','action':'view','year':2004}
         url = URLGenerator(con.mapper, {'wsgiorg.routing_args':((), con.mapper_dict)})
 
-        eq_('/archive/2004/10', url_for(month=10))
-        eq_('/archive/2004/9/2', url_for(month=9, day=2))
-        eq_('/blog', url_for(controller='blog', year=None))
+        assert url_for(month=10) == '/archive/2004/10'
+        assert url_for(month=9, day=2) == '/archive/2004/9/2'
+        assert url_for(controller='blog', year=None) == '/blog'
 
-        eq_('/archive/2004/10', url.current(month=10))
-        eq_('/archive/2004/9/2', url.current(month=9, day=2))
-        eq_('/blog', url.current(controller='blog', year=None))
+        assert url.current(month=10) == '/archive/2004/10'
+        assert url.current(month=9, day=2) == '/archive/2004/9/2'
+        assert url.current(controller='blog', year=None) == '/blog'
 
     def test_url_for_with_more_defaults(self):
         con = self.con
         con.mapper_dict = {'controller':'blog','action':'view','id':4}
         url = URLGenerator(con.mapper, {'wsgiorg.routing_args':((), con.mapper_dict)})
 
-        eq_('/blog/view/4', url_for())
-        eq_('/post/index/4', url_for(controller='post'))
-        eq_('/blog/view/2', url_for(id=2))
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        assert url_for() == '/blog/view/4'
+        assert url_for(controller='post') == '/post/index/4'
+        assert url_for(id=2) == '/blog/view/2'
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
-        eq_('/blog/view/4', url.current())
-        eq_('/post/index/4', url.current(controller='post'))
-        eq_('/blog/view/2', url.current(id=2))
-        eq_('/viewpost/4', url.current(controller='post', action='view', id=4))
+        assert url.current() == '/blog/view/4'
+        assert url.current(controller='post') == '/post/index/4'
+        assert url.current(id=2) == '/blog/view/2'
+        assert url.current(controller='post', action='view', id=4) == '/viewpost/4'
 
         con.mapper_dict = {'controller':'blog','action':'view','year':2004}
         url = URLGenerator(con.mapper, {'wsgiorg.routing_args':((), con.mapper_dict)})
-        eq_('/archive/2004/10', url_for(month=10))
-        eq_('/archive/2004/9/2', url_for(month=9, day=2))
-        eq_('/blog', url_for(controller='blog', year=None))
-        eq_('/archive/2004', url_for())
+        assert url_for(month=10) == '/archive/2004/10'
+        assert url_for(month=9, day=2) == '/archive/2004/9/2'
+        assert url_for(controller='blog', year=None) == '/blog'
+        assert url_for() == '/archive/2004'
 
-        eq_('/archive/2004/10', url.current(month=10))
-        eq_('/archive/2004/9/2', url.current(month=9, day=2))
-        eq_('/blog', url.current(controller='blog', year=None))
-        eq_('/archive/2004', url.current())
+        assert url.current(month=10) == '/archive/2004/10'
+        assert url.current(month=9, day=2) == '/archive/2004/9/2'
+        assert url.current(controller='blog', year=None) == '/blog'
+        assert url.current() == '/archive/2004'
 
     def test_url_for_with_defaults_and_qualified(self):
         m = self.con.mapper
@@ -136,17 +138,17 @@ def test_url_for_with_defaults_and_qualified(self):
         self.con.environ.update({'wsgiorg.routing_args':((), self.con.mapper_dict)})
         url = URLGenerator(m, self.con.environ)
 
-        eq_('/blog/view/4', url_for())
-        eq_('/post/index/4', url_for(controller='post'))
-        eq_('http://www.example.com/blog/view/4', url_for(qualified=True))
-        eq_('/blog/view/2', url_for(id=2))
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        assert url_for() == '/blog/view/4'
+        assert url_for(controller='post') == '/post/index/4'
+        assert url_for(qualified=True) == 'http://www.example.com/blog/view/4'
+        assert url_for(id=2) == '/blog/view/2'
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
-        eq_('/blog/view/4', url.current())
-        eq_('/post/index/4', url.current(controller='post'))
-        eq_('http://www.example.com/blog/view/4', url.current(qualified=True))
-        eq_('/blog/view/2', url.current(id=2))
-        eq_('/viewpost/4', url.current(controller='post', action='view', id=4))
+        assert url.current() == '/blog/view/4'
+        assert url.current(controller='post') == '/post/index/4'
+        assert url.current(qualified=True) == 'http://www.example.com/blog/view/4'
+        assert url.current(id=2) == '/blog/view/2'
+        assert url.current(controller='post', action='view', id=4) == '/viewpost/4'
 
         env = dict(SCRIPT_NAME='', SERVER_NAME='www.example.com', SERVER_PORT='8080', PATH_INFO='/blog/view/4')
         env['wsgi.url_scheme'] = 'http'
@@ -154,18 +156,18 @@ def test_url_for_with_defaults_and_qualified(self):
         self.con.environ.update({'wsgiorg.routing_args':((), self.con.mapper_dict)})
         url = URLGenerator(m, self.con.environ)
 
-        eq_('/post/index/4', url_for(controller='post'))
-        eq_('http://www.example.com:8080/blog/view/4', url_for(qualified=True))
+        assert url_for(controller='post') == '/post/index/4'
+        assert url_for(qualified=True) == 'http://www.example.com:8080/blog/view/4'
 
-        eq_('/post/index/4', url.current(controller='post'))
-        eq_('http://www.example.com:8080/blog/view/4', url.current(qualified=True))
+        assert url.current(controller='post') == '/post/index/4'
+        assert url.current(qualified=True) == 'http://www.example.com:8080/blog/view/4'
 
     def test_route_overflow(self):
         m = self.con.mapper
         m.create_regs(["x"*50000])
         m.connect('route-overflow', "x"*50000)
         url = URLGenerator(m, {})
-        eq_("/%s" % ("x"*50000), url('route-overflow'))
+        assert url('route-overflow') == "/%s" % ("x"*50000)
 
     def test_with_route_names(self):
         m = self.con.mapper
@@ -176,12 +178,12 @@ def test_with_route_names(self):
         url = URLGenerator(m, {})
 
         for urlobj in [url, url_for]:
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/content', urlobj(controller='content'))
-            eq_('/admin/comments', urlobj(controller='admin/comments'))
-            eq_('/category', urlobj('category_home'))
-            eq_('/category/food', urlobj('category_home', section='food'))
-            eq_('/', urlobj('home'))
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj(controller='content') == '/content'
+            assert urlobj(controller='admin/comments') == '/admin/comments'
+            assert urlobj('category_home') == '/category'
+            assert urlobj('category_home', section='food') == '/category/food'
+            assert urlobj('home') == '/'
 
     def test_with_route_names_and_defaults(self):
         m = self.con.mapper
@@ -194,10 +196,10 @@ def test_with_route_names_and_defaults(self):
         self.con.mapper_dict = dict(controller='building', action='showjacks', campus='wilma', building='port')
         url = URLGenerator(m, {'wsgiorg.routing_args':((), self.con.mapper_dict)})
 
-        eq_('/building/wilma/port/alljacks', url_for())
-        eq_('/', url_for('home'))
-        eq_('/building/wilma/port/alljacks', url.current())
-        eq_('/', url.current('home'))
+        assert url_for() == '/building/wilma/port/alljacks'
+        assert url_for('home') == '/'
+        assert url.current() == '/building/wilma/port/alljacks'
+        assert url.current('home') == '/'
 
     def test_with_route_names_and_hardcode(self):
         m = self.con.mapper
@@ -213,22 +215,22 @@ def test_with_route_names_and_hardcode(self):
 
         self.con.mapper_dict = dict(controller='building', action='showjacks', campus='wilma', building='port')
         url = URLGenerator(m, {'wsgiorg.routing_args':((), self.con.mapper_dict)})
-        eq_('/building/wilma/port/alljacks', url_for())
-        eq_('/', url_for('home'))
-        eq_('/gallery/home_thumbnail.jpg', url_for('gallery_thumb', img_id='home'))
-        eq_('/gallery/home_thumbnail.jpg', url_for('gallery', img_id='home'))
+        assert url_for() == '/building/wilma/port/alljacks'
+        assert url_for('home') == '/'
+        assert url_for('gallery_thumb', img_id='home') == '/gallery/home_thumbnail.jpg'
+        assert url_for('gallery', img_id='home') == '/gallery/home_thumbnail.jpg'
 
-        eq_('/building/wilma/port/alljacks', url.current())
-        eq_('/', url.current('home'))
-        eq_('/gallery/home_thumbnail.jpg', url.current('gallery_thumb', img_id='home'))
-        eq_('/gallery/home_thumbnail.jpg', url.current('gallery', img_id='home'))
+        assert url.current() == '/building/wilma/port/alljacks'
+        assert url.current('home') == '/'
+        assert url.current('gallery_thumb', img_id='home') == '/gallery/home_thumbnail.jpg'
+        assert url.current('gallery', img_id='home') == '/gallery/home_thumbnail.jpg'
 
         m.hardcode_names = True
-        eq_('/gallery/home_thumbnail.jpg', url_for('gallery_thumb', img_id='home'))
-        eq_('/gallery/home.jpg', url_for('gallery', img_id='home'))
+        assert url_for('gallery_thumb', img_id='home') == '/gallery/home_thumbnail.jpg'
+        assert url_for('gallery', img_id='home') == '/gallery/home.jpg'
 
-        eq_('/gallery/home_thumbnail.jpg', url.current('gallery_thumb', img_id='home'))
-        eq_('/gallery/home.jpg', url.current('gallery', img_id='home'))
+        assert url.current('gallery_thumb', img_id='home') == '/gallery/home_thumbnail.jpg'
+        assert url.current('gallery', img_id='home') == '/gallery/home.jpg'
         m.hardcode_names = False
 
     def test_redirect_to(self):
@@ -242,15 +244,15 @@ def printer(echo):
         m.create_regs(['content','blog','admin/comments'])
 
         redirect_to(controller='content', action='view')
-        eq_('/content/view', redirect_to.result)
+        assert redirect_to.result == '/content/view'
         redirect_to(controller='content', action='lookup', id=4)
-        eq_('/content/lookup/4', redirect_to.result)
+        assert redirect_to.result == '/content/lookup/4'
         redirect_to(controller='admin/comments',action='splash')
-        eq_('/admin/comments/splash', redirect_to.result)
+        assert redirect_to.result == '/admin/comments/splash'
         redirect_to('http://www.example.com/')
-        eq_('http://www.example.com/', redirect_to.result)
+        assert redirect_to.result == 'http://www.example.com/'
         redirect_to('/somewhere.html', var='keyword')
-        eq_('/somewhere.html?var=keyword', redirect_to.result)
+        assert redirect_to.result == '/somewhere.html?var=keyword'
 
     def test_redirect_to_with_route_names(self):
         m = self.con.mapper
@@ -264,17 +266,17 @@ def printer(echo):
         m.create_regs(['content','blog','admin/comments'])
 
         redirect_to(controller='content', action='view')
-        eq_('/content/view', redirect_to.result)
+        assert redirect_to.result == '/content/view'
         redirect_to(controller='content')
-        eq_('/content', redirect_to.result)
+        assert redirect_to.result == '/content'
         redirect_to(controller='admin/comments')
-        eq_('/admin/comments', redirect_to.result)
+        assert redirect_to.result == '/admin/comments'
         redirect_to('category_home')
-        eq_('/category', redirect_to.result)
+        assert redirect_to.result == '/category'
         redirect_to('category_home', section='food')
-        eq_('/category/food', redirect_to.result)
+        assert redirect_to.result == '/category/food'
         redirect_to('home')
-        eq_('/', redirect_to.result)
+        assert redirect_to.result == '/'
 
     def test_static_route(self):
         m = self.con.mapper
@@ -287,10 +289,10 @@ def test_static_route(self):
 
         url = URLGenerator(m, {})
         for urlobj in [url_for, url]:
-            eq_('http://www.groovie.org/', urlobj('home'))
-            eq_('http://www.groovie.org/?s=stars', urlobj('home', s='stars'))
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/nasa/images?search=all', urlobj('space', search='all'))
+            assert urlobj('home') == 'http://www.groovie.org/'
+            assert urlobj('home', s='stars') == 'http://www.groovie.org/?s=stars'
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj('space', search='all') == '/nasa/images?search=all'
 
     def test_static_route_with_script(self):
         m = self.con.mapper
@@ -305,12 +307,12 @@ def test_static_route_with_script(self):
         self.con.environ.update({'wsgiorg.routing_args':((), {})})
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            eq_('http://www.groovie.org/', urlobj('home'))
-            eq_('http://www.groovie.org/?s=stars', urlobj('home', s='stars'))
-            eq_('/webapp/content/view', urlobj(controller='content', action='view'))
-            eq_('/webapp/nasa/images?search=all', urlobj('space', search='all'))
-            eq_('http://example.com/webapp/nasa/images', urlobj('space', protocol='http'))
-            eq_('http://example.com/webapp/login', urlobj('login', qualified=True))
+            assert urlobj('home') == 'http://www.groovie.org/'
+            assert urlobj('home', s='stars') == 'http://www.groovie.org/?s=stars'
+            assert urlobj(controller='content', action='view') == '/webapp/content/view'
+            assert urlobj('space', search='all') == '/webapp/nasa/images?search=all'
+            assert urlobj('space', protocol='http') == 'http://example.com/webapp/nasa/images'
+            assert urlobj('login', qualified=True) == 'http://example.com/webapp/login'
 
     def test_static_route_with_vars(self):
         m = self.con.mapper
@@ -323,13 +325,16 @@ def test_static_route_with_vars(self):
         self.con.environ.update({'wsgiorg.routing_args':((), {})})
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            assert_raises(GenerationException, urlobj, 'home')
-            assert_raises(GenerationException, urlobj, 'home', domain='fred')
-            assert_raises(GenerationException, urlobj, 'home', location='index')
-            eq_('http://fred.groovie.org/index', urlobj('home', domain='fred', location='index'))
-            eq_('http://fred.groovie.org/index?search=all', urlobj('home', domain='fred', location='index', search='all'))
-            eq_('/webapp/nasa/images?search=all', urlobj('space', location='images', search='all'))
-            eq_('http://example.com/webapp/nasa/images', urlobj('space', location='images', protocol='http'))
+            with pytest.raises(GenerationException):
+                urlobj('home')
+            with pytest.raises(GenerationException):
+                urlobj('home', domain='fred')
+            with pytest.raises(GenerationException):
+                urlobj('home', location='index')
+            assert urlobj('home', domain='fred', location='index') == 'http://fred.groovie.org/index'
+            assert urlobj('home', domain='fred', location='index', search='all') == 'http://fred.groovie.org/index?search=all'
+            assert urlobj('space', location='images', search='all') == '/webapp/nasa/images?search=all'
+            assert urlobj('space', location='images', protocol='http') == 'http://example.com/webapp/nasa/images'
 
     def test_static_route_with_vars_and_defaults(self):
         m = self.con.mapper
@@ -342,27 +347,31 @@ def test_static_route_with_vars_and_defaults(self):
         self.con.environ.update({'wsgiorg.routing_args':((), {})})
         url = URLGenerator(m, self.con.environ)
 
-        assert_raises(GenerationException, url_for, 'home')
-        assert_raises(GenerationException, url_for, 'home', domain='fred')
-        eq_('http://routes.groovie.org/index', url_for('home', location='index'))
-        eq_('http://fred.groovie.org/index', url_for('home', domain='fred', location='index'))
-        eq_('http://routes.groovie.org/index?search=all', url_for('home', location='index', search='all'))
-        eq_('http://fred.groovie.org/index?search=all', url_for('home', domain='fred', location='index', search='all'))
-        eq_('/webapp/nasa/articles?search=all', url_for('space', location='articles', search='all'))
-        eq_('http://example.com/webapp/nasa/articles', url_for('space', location='articles', protocol='http'))
-        eq_('/webapp/nasa/images?search=all', url_for('space', search='all'))
-        eq_('http://example.com/webapp/nasa/images', url_for('space', protocol='http'))
-
-        assert_raises(GenerationException, url.current, 'home')
-        assert_raises(GenerationException, url.current, 'home', domain='fred')
-        eq_('http://routes.groovie.org/index', url.current('home', location='index'))
-        eq_('http://fred.groovie.org/index', url.current('home', domain='fred', location='index'))
-        eq_('http://routes.groovie.org/index?search=all', url.current('home', location='index', search='all'))
-        eq_('http://fred.groovie.org/index?search=all', url.current('home', domain='fred', location='index', search='all'))
-        eq_('/webapp/nasa/articles?search=all', url.current('space', location='articles', search='all'))
-        eq_('http://example.com/webapp/nasa/articles', url.current('space', location='articles', protocol='http'))
-        eq_('/webapp/nasa/images?search=all', url.current('space', search='all'))
-        eq_('http://example.com/webapp/nasa/images', url.current('space', protocol='http'))
+        with pytest.raises(GenerationException):
+            url_for('home')
+        with pytest.raises(GenerationException):
+            url_for('home', domain='fred')
+        assert url_for('home', location='index') == 'http://routes.groovie.org/index'
+        assert url_for('home', domain='fred', location='index') == 'http://fred.groovie.org/index'
+        assert url_for('home', location='index', search='all') == 'http://routes.groovie.org/index?search=all'
+        assert url_for('home', domain='fred', location='index', search='all') == 'http://fred.groovie.org/index?search=all'
+        assert url_for('space', location='articles', search='all') == '/webapp/nasa/articles?search=all'
+        assert url_for('space', location='articles', protocol='http') == 'http://example.com/webapp/nasa/articles'
+        assert url_for('space', search='all') == '/webapp/nasa/images?search=all'
+        assert url_for('space', protocol='http') == 'http://example.com/webapp/nasa/images'
+
+        with pytest.raises(GenerationException):
+            url.current('home')
+        with pytest.raises(GenerationException):
+            url.current('home', domain='fred')
+        assert url.current('home', location='index') == 'http://routes.groovie.org/index'
+        assert url.current('home', domain='fred', location='index') == 'http://fred.groovie.org/index'
+        assert url.current('home', location='index', search='all') == 'http://routes.groovie.org/index?search=all'
+        assert url.current('home', domain='fred', location='index', search='all') == 'http://fred.groovie.org/index?search=all'
+        assert url.current('space', location='articles', search='all') == '/webapp/nasa/articles?search=all'
+        assert url.current('space', location='articles', protocol='http') == 'http://example.com/webapp/nasa/articles'
+        assert url.current('space', search='all') == '/webapp/nasa/images?search=all'
+        assert url.current('space', protocol='http') == 'http://example.com/webapp/nasa/images'
 
 
     def test_static_route_with_vars_and_requirements(self):
@@ -377,31 +386,43 @@ def test_static_route_with_vars_and_requirements(self):
         self.con.environ.update({'wsgiorg.routing_args':((), {})})
         url = URLGenerator(m, self.con.environ)
 
-        assert_raises(GenerationException, url_for, 'home', domain='george', location='index')
-        assert_raises(GenerationException, url_for, 'space', year='asdf', month='1')
-        assert_raises(GenerationException, url_for, 'space', year='2004', month='a')
-        assert_raises(GenerationException, url_for, 'space', year='1', month='1')
-        assert_raises(GenerationException, url_for, 'space', year='20045', month='1')
-        assert_raises(GenerationException, url_for, 'space', year='2004', month='123')
-        eq_('http://fred.groovie.org/index', url_for('home', domain='fred', location='index'))
-        eq_('http://bob.groovie.org/index', url_for('home', domain='bob', location='index'))
-        eq_('http://fred.groovie.org/asdf', url_for('home', domain='fred', location='asdf'))
-        eq_('/webapp/nasa/articles/2004/6', url_for('space', year='2004', month='6'))
-        eq_('/webapp/nasa/articles/2004/12', url_for('space', year='2004', month='12'))
-        eq_('/webapp/nasa/articles/89/6', url_for('space', year='89', month='6'))
-
-        assert_raises(GenerationException, url.current, 'home', domain='george', location='index')
-        assert_raises(GenerationException, url.current, 'space', year='asdf', month='1')
-        assert_raises(GenerationException, url.current, 'space', year='2004', month='a')
-        assert_raises(GenerationException, url.current, 'space', year='1', month='1')
-        assert_raises(GenerationException, url.current, 'space', year='20045', month='1')
-        assert_raises(GenerationException, url.current, 'space', year='2004', month='123')
-        eq_('http://fred.groovie.org/index', url.current('home', domain='fred', location='index'))
-        eq_('http://bob.groovie.org/index', url.current('home', domain='bob', location='index'))
-        eq_('http://fred.groovie.org/asdf', url.current('home', domain='fred', location='asdf'))
-        eq_('/webapp/nasa/articles/2004/6', url.current('space', year='2004', month='6'))
-        eq_('/webapp/nasa/articles/2004/12', url.current('space', year='2004', month='12'))
-        eq_('/webapp/nasa/articles/89/6', url.current('space', year='89', month='6'))
+        with pytest.raises(GenerationException):
+            url_for('home', domain='george', location='index')
+        with pytest.raises(GenerationException):
+            url_for('space', year='asdf', month='1')
+        with pytest.raises(GenerationException):
+            url_for('space', year='2004', month='a')
+        with pytest.raises(GenerationException):
+            url_for('space', year='1', month='1')
+        with pytest.raises(GenerationException):
+            url_for('space', year='20045', month='1')
+        with pytest.raises(GenerationException):
+            url_for('space', year='2004', month='123')
+        assert url_for('home', domain='fred', location='index') == 'http://fred.groovie.org/index'
+        assert url_for('home', domain='bob', location='index') == 'http://bob.groovie.org/index'
+        assert url_for('home', domain='fred', location='asdf') == 'http://fred.groovie.org/asdf'
+        assert url_for('space', year='2004', month='6') == '/webapp/nasa/articles/2004/6'
+        assert url_for('space', year='2004', month='12') == '/webapp/nasa/articles/2004/12'
+        assert url_for('space', year='89', month='6') == '/webapp/nasa/articles/89/6'
+
+        with pytest.raises(GenerationException):
+            url.current('home', domain='george', location='index')
+        with pytest.raises(GenerationException):
+            url.current('space', year='asdf', month='1')
+        with pytest.raises(GenerationException):
+            url.current('space', year='2004', month='a')
+        with pytest.raises(GenerationException):
+            url.current('space', year='1', month='1')
+        with pytest.raises(GenerationException):
+            url.current('space', year='20045', month='1')
+        with pytest.raises(GenerationException):
+            url.current('space', year='2004', month='123')
+        assert url.current('home', domain='fred', location='index') == 'http://fred.groovie.org/index'
+        assert url.current('home', domain='bob', location='index') == 'http://bob.groovie.org/index'
+        assert url.current('home', domain='fred', location='asdf') == 'http://fred.groovie.org/asdf'
+        assert url.current('space', year='2004', month='6') == '/webapp/nasa/articles/2004/6'
+        assert url.current('space', year='2004', month='12') == '/webapp/nasa/articles/2004/12'
+        assert url.current('space', year='89', month='6') == '/webapp/nasa/articles/89/6'
 
     def test_no_named_path(self):
         m = self.con.mapper
@@ -414,10 +435,10 @@ def test_no_named_path(self):
 
         url = URLGenerator(m, {})
         for urlobj in [url_for, url]:
-            eq_('http://www.google.com/search', urlobj('http://www.google.com/search'))
-            eq_('http://www.google.com/search?q=routes', urlobj('http://www.google.com/search', q='routes'))
-            eq_('/delicious.jpg', urlobj('/delicious.jpg'))
-            eq_('/delicious/search?v=routes', urlobj('/delicious/search', v='routes'))
+            assert urlobj('http://www.google.com/search') == 'http://www.google.com/search'
+            assert urlobj('http://www.google.com/search', q='routes') == 'http://www.google.com/search?q=routes'
+            assert urlobj('/delicious.jpg') == '/delicious.jpg'
+            assert urlobj('/delicious/search', v='routes') == '/delicious/search?v=routes'
 
     def test_append_slash(self):
         m = self.con.mapper
@@ -431,12 +452,12 @@ def test_append_slash(self):
 
         url = URLGenerator(m, {})
         for urlobj in [url_for, url]:
-            eq_('http://www.google.com/search', urlobj('http://www.google.com/search'))
-            eq_('http://www.google.com/search?q=routes', urlobj('http://www.google.com/search', q='routes'))
-            eq_('/delicious.jpg', urlobj('/delicious.jpg'))
-            eq_('/delicious/search?v=routes', urlobj('/delicious/search', v='routes'))
-            eq_('/content/list/', urlobj(controller='/content', action='list'))
-            eq_('/content/list/?page=1', urlobj(controller='/content', action='list', page='1'))
+            assert urlobj('http://www.google.com/search') == 'http://www.google.com/search'
+            assert urlobj('http://www.google.com/search', q='routes') == 'http://www.google.com/search?q=routes'
+            assert urlobj('/delicious.jpg') == '/delicious.jpg'
+            assert urlobj('/delicious/search', v='routes') == '/delicious/search?v=routes'
+            assert urlobj(controller='/content', action='list') == '/content/list/'
+            assert urlobj(controller='/content', action='list', page='1') == '/content/list/?page=1'
 
     def test_no_named_path_with_script(self):
         m = self.con.mapper
@@ -449,10 +470,10 @@ def test_no_named_path_with_script(self):
 
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            eq_('http://www.google.com/search', urlobj('http://www.google.com/search'))
-            eq_('http://www.google.com/search?q=routes', urlobj('http://www.google.com/search', q='routes'))
-            eq_('/webapp/delicious.jpg', urlobj('/delicious.jpg'))
-            eq_('/webapp/delicious/search?v=routes', urlobj('/delicious/search', v='routes'))
+            assert urlobj('http://www.google.com/search') == 'http://www.google.com/search'
+            assert urlobj('http://www.google.com/search', q='routes') == 'http://www.google.com/search?q=routes'
+            assert urlobj('/delicious.jpg') == '/webapp/delicious.jpg'
+            assert urlobj('/delicious/search', v='routes') == '/webapp/delicious/search?v=routes'
 
     def test_route_filter(self):
         def article_filter(kargs):
@@ -480,20 +501,20 @@ def article_filter(kargs):
 
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            assert_raises(Exception, urlobj, controller='content', action='view')
-            assert_raises(Exception, urlobj, controller='content')
+            with pytest.raises(Exception):
+                urlobj(controller='content', action='view')
+            with pytest.raises(Exception):
+                urlobj(controller='content')
 
-            eq_('/content/view-3.html', urlobj(controller='content', action='view', id=3))
-            eq_('/content/index-2.html', urlobj(controller='content', id=2))
+            assert urlobj(controller='content', action='view', id=3) == '/content/view-3.html'
+            assert urlobj(controller='content', id=2) == '/content/index-2.html'
 
-            eq_('/archives/2005/10/5/happy',
-                urlobj('archives',year=2005, month=10, day=5, slug='happy'))
+            assert urlobj('archives', year=2005, month=10, day=5, slug='happy') == '/archives/2005/10/5/happy'
             story = dict(year=2003, month=8, day=2, slug='woopee')
             empty = {}
-            eq_({'controller':'archives','action':'view','year':'2005',
-                'month':'10','day':'5','slug':'happy'}, m.match('/archives/2005/10/5/happy'))
-            eq_('/archives/2003/8/2/woopee', urlobj('archives', article=story))
-            eq_('/archives/2004/12/20/default', urlobj('archives', article=empty))
+            assert m.match('/archives/2005/10/5/happy') == {'controller':'archives','action':'view','year':'2005','month':'10','day':'5','slug':'happy'}
+            assert urlobj('archives', article=story) == '/archives/2003/8/2/woopee'
+            assert urlobj('archives', article=empty) == '/archives/2004/12/20/default'
 
     def test_with_ssl_environ(self):
         base_environ = dict(SCRIPT_NAME='', HTTPS='on', SERVER_PORT='443', PATH_INFO='/',
@@ -512,21 +533,21 @@ def test_with_ssl_environ(self):
         for urlobj in [url_for, url]:
 
             # HTTPS is on, but we're running on a different port internally
-            eq_(self.con.protocol, 'https')
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/content/index/2', urlobj(controller='content', id=2))
-            eq_('https://nowhere.com/content', urlobj(host='nowhere.com', controller='content'))
+            assert self.con.protocol == 'https'
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj(controller='content', id=2) == '/content/index/2'
+            assert urlobj(host='nowhere.com', controller='content') == 'https://nowhere.com/content'
 
             # If HTTPS is on, but the port isn't 443, we'll need to include the port info
             environ = base_environ.copy()
             environ.update(dict(SERVER_PORT='8080'))
             self.con.environ = environ
             self.con.mapper_dict = {}
-            eq_('/content/index/2', urlobj(controller='content', id=2))
-            eq_('https://nowhere.com/content', urlobj(host='nowhere.com', controller='content'))
-            eq_('https://nowhere.com:8080/content', urlobj(host='nowhere.com:8080', controller='content'))
-            eq_('http://nowhere.com/content', urlobj(host='nowhere.com', protocol='http', controller='content'))
-            eq_('http://home.com/content', urlobj(host='home.com', protocol='http', controller='content'))
+            assert urlobj(controller='content', id=2) == '/content/index/2'
+            assert urlobj(host='nowhere.com', controller='content') == 'https://nowhere.com/content'
+            assert urlobj(host='nowhere.com:8080', controller='content') == 'https://nowhere.com:8080/content'
+            assert urlobj(host='nowhere.com', protocol='http', controller='content') == 'http://nowhere.com/content'
+            assert urlobj(host='home.com', protocol='http', controller='content') == 'http://home.com/content'
 
 
     def test_with_http_environ(self):
@@ -544,10 +565,10 @@ def test_with_http_environ(self):
 
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            eq_(self.con.protocol, 'http')
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/content/index/2', urlobj(controller='content', id=2))
-            eq_('https://example.com/content', urlobj(protocol='https', controller='content'))
+            assert self.con.protocol == 'http'
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj(controller='content', id=2) == '/content/index/2'
+            assert urlobj(protocol='https', controller='content') == 'https://example.com/content'
 
 
     def test_subdomains(self):
@@ -564,14 +585,14 @@ def test_subdomains(self):
 
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/content/index/2', urlobj(controller='content', id=2))
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj(controller='content', id=2) == '/content/index/2'
             environ = base_environ.copy()
             environ.update(dict(HTTP_HOST='sub.example.com'))
             self.con.environ = environ
             self.con.mapper_dict = {'sub_domain':'sub'}
-            eq_('/content/view/3', urlobj(controller='content', action='view', id=3))
-            eq_('http://new.example.com/content', urlobj(controller='content', sub_domain='new'))
+            assert urlobj(controller='content', action='view', id=3) == '/content/view/3'
+            assert urlobj(controller='content', sub_domain='new') == 'http://new.example.com/content'
 
     def test_subdomains_with_exceptions(self):
         base_environ = dict(SCRIPT_NAME='', PATH_INFO='/', HTTP_HOST='example.com', SERVER_NAME='example.com')
@@ -587,10 +608,10 @@ def test_subdomains_with_exceptions(self):
         self.con.mapper = m
 
         url = URLGenerator(m, self.con.environ)
-        eq_('/content/view', url_for(controller='content', action='view'))
-        eq_('/content/index/2', url_for(controller='content', id=2))
-        eq_('/content/view', url(controller='content', action='view'))
-        eq_('/content/index/2', url(controller='content', id=2))
+        assert url_for(controller='content', action='view') == '/content/view'
+        assert url_for(controller='content', id=2) == '/content/index/2'
+        assert url(controller='content', action='view') == '/content/view'
+        assert url(controller='content', id=2) == '/content/index/2'
 
         environ = base_environ.copy()
         environ.update(dict(HTTP_HOST='sub.example.com'))
@@ -599,25 +620,25 @@ def test_subdomains_with_exceptions(self):
         self.con.environ.update({'wsgiorg.routing_args':((), self.con.mapper_dict)})
         url = URLGenerator(m, self.con.environ)
 
-        eq_('/content/view/3', url_for(controller='content', action='view', id=3))
-        eq_('http://new.example.com/content', url_for(controller='content', sub_domain='new'))
-        eq_('http://example.com/content', url_for(controller='content', sub_domain='www'))
-        eq_('/content/view/3', url(controller='content', action='view', id=3))
-        eq_('http://new.example.com/content', url(controller='content', sub_domain='new'))
-        eq_('http://example.com/content', url(controller='content', sub_domain='www'))
+        assert url_for(controller='content', action='view', id=3) == '/content/view/3'
+        assert url_for(controller='content', sub_domain='new') == 'http://new.example.com/content'
+        assert url_for(controller='content', sub_domain='www') == 'http://example.com/content'
+        assert url(controller='content', action='view', id=3) == '/content/view/3'
+        assert url(controller='content', sub_domain='new') == 'http://new.example.com/content'
+        assert url(controller='content', sub_domain='www') == 'http://example.com/content'
 
         self.con.mapper_dict = {'sub_domain':'www'}
         self.con.environ.update({'wsgiorg.routing_args':((), self.con.mapper_dict)})
         url = URLGenerator(m, self.con.environ)
 
-        eq_('http://example.com/content/view/3', url_for(controller='content', action='view', id=3))
-        eq_('http://new.example.com/content', url_for(controller='content', sub_domain='new'))
-        eq_('/content', url_for(controller='content', sub_domain='sub'))
+        assert url_for(controller='content', action='view', id=3) == 'http://example.com/content/view/3'
+        assert url_for(controller='content', sub_domain='new') == 'http://new.example.com/content'
+        assert url_for(controller='content', sub_domain='sub') == '/content'
 
         # This requires the sub-domain, because we don't automatically go to the existing match dict
-        eq_('http://example.com/content/view/3', url(controller='content', action='view', id=3, sub_domain='www'))
-        eq_('http://new.example.com/content', url(controller='content', sub_domain='new'))
-        eq_('/content', url(controller='content', sub_domain='sub'))
+        assert url(controller='content', action='view', id=3, sub_domain='www') == 'http://example.com/content/view/3'
+        assert url(controller='content', sub_domain='new') == 'http://new.example.com/content'
+        assert url(controller='content', sub_domain='sub') == '/content'
 
     def test_subdomains_with_named_routes(self):
         base_environ = dict(SCRIPT_NAME='', PATH_INFO='/', HTTP_HOST='example.com', SERVER_NAME='example.com')
@@ -635,10 +656,10 @@ def test_subdomains_with_named_routes(self):
 
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url_for, url]:
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/content/index/2', urlobj(controller='content', id=2))
-            eq_('/category', urlobj('category_home'))
-            eq_('http://new.example.com/category', urlobj('category_home', sub_domain='new'))
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj(controller='content', id=2) == '/content/index/2'
+            assert urlobj('category_home') == '/category'
+            assert urlobj('category_home', sub_domain='new') == 'http://new.example.com/category'
 
         environ = base_environ.copy()
         environ.update(dict(HTTP_HOST='sub.example.com'))
@@ -647,15 +668,13 @@ def test_subdomains_with_named_routes(self):
         self.con.environ.update({'wsgiorg.routing_args':((), self.con.mapper_dict)})
         url = URLGenerator(m, self.con.environ)
 
-        eq_('/content/view/3', url_for(controller='content', action='view', id=3))
-        eq_('http://joy.example.com/building/west/merlot/alljacks',
-            url_for('building', campus='west', building='merlot', sub_domain='joy'))
-        eq_('http://example.com/category/feeds', url_for('category_home', section='feeds', sub_domain=None))
+        assert url_for(controller='content', action='view', id=3) == '/content/view/3'
+        assert url_for('building', campus='west', building='merlot', sub_domain='joy') == 'http://joy.example.com/building/west/merlot/alljacks'
+        assert url_for('category_home', section='feeds', sub_domain=None) == 'http://example.com/category/feeds'
 
-        eq_('/content/view/3', url(controller='content', action='view', id=3))
-        eq_('http://joy.example.com/building/west/merlot/alljacks',
-            url('building', campus='west', building='merlot', sub_domain='joy'))
-        eq_('http://example.com/category/feeds', url('category_home', section='feeds', sub_domain=None))
+        assert url(controller='content', action='view', id=3) == '/content/view/3'
+        assert url('building', campus='west', building='merlot', sub_domain='joy') == 'http://joy.example.com/building/west/merlot/alljacks'
+        assert url('category_home', section='feeds', sub_domain=None) == 'http://example.com/category/feeds'
 
 
     def test_subdomains_with_ports(self):
@@ -675,15 +694,14 @@ def test_subdomains_with_ports(self):
         url = URLGenerator(m, self.con.environ)
         for urlobj in [url, url_for]:
             self.con.environ['HTTP_HOST'] = 'example.com:8000'
-            eq_('/content/view', urlobj(controller='content', action='view'))
-            eq_('/category', urlobj('category_home'))
-            eq_('http://new.example.com:8000/category', urlobj('category_home', sub_domain='new'))
-            eq_('http://joy.example.com:8000/building/west/merlot/alljacks',
-                urlobj('building', campus='west', building='merlot', sub_domain='joy'))
+            assert urlobj(controller='content', action='view') == '/content/view'
+            assert urlobj('category_home') == '/category'
+            assert urlobj('category_home', sub_domain='new') == 'http://new.example.com:8000/category'
+            assert urlobj('building', campus='west', building='merlot', sub_domain='joy') == 'http://joy.example.com:8000/building/west/merlot/alljacks'
 
             self.con.environ['HTTP_HOST'] = 'example.com'
             del self.con.environ['routes.cached_hostinfo']
-            eq_('http://new.example.com/category', urlobj('category_home', sub_domain='new'))
+            assert urlobj('category_home', sub_domain='new') == 'http://new.example.com/category'
 
     def test_subdomains_with_default(self):
         base_environ = dict(SCRIPT_NAME='', PATH_INFO='/', HTTP_HOST='example.com:8000', SERVER_NAME='example.com')
@@ -702,13 +720,14 @@ def test_subdomains_with_default(self):
 
         urlobj = URLGenerator(m, self.con.environ)
         self.con.environ['HTTP_HOST'] = 'example.com:8000'
-        eq_('/content/view', urlobj(controller='content', action='view'))
-        eq_('http://cat.example.com:8000/category', urlobj('category_home'))
+        assert urlobj(controller='content', action='view') == '/content/view'
+        assert urlobj('category_home') == 'http://cat.example.com:8000/category'
 
         self.con.environ['HTTP_HOST'] = 'example.com'
         del self.con.environ['routes.cached_hostinfo']
 
-        assert_raises(GenerationException, lambda: urlobj('category_home', sub_domain='new'))
+        with pytest.raises(GenerationException):
+            urlobj('category_home', sub_domain='new')
 
 
     def test_controller_scan(self):
@@ -716,10 +735,10 @@ def test_controller_scan(self):
         controller_dir = os.path.join(os.path.dirname(here_dir),
             os.path.join('test_files', 'controller_files'))
         controllers = controller_scan(controller_dir)
-        eq_(len(controllers), 3)
-        eq_(controllers[0], 'admin/users')
-        eq_(controllers[1], 'content')
-        eq_(controllers[2], 'users')
+        assert len(controllers) == 3
+        assert controllers[0] == 'admin/users'
+        assert controllers[1] == 'content'
+        assert controllers[2] == 'users'
 
     def test_auto_controller_scan(self):
         here_dir = os.path.dirname(__file__)
@@ -730,9 +749,9 @@ def test_auto_controller_scan(self):
         m.always_scan = True
         m.connect(':controller/:action/:id')
 
-        eq_({'action':'index', 'controller':'content','id':None}, m.match('/content'))
-        eq_({'action':'index', 'controller':'users','id':None}, m.match('/users'))
-        eq_({'action':'index', 'controller':'admin/users','id':None}, m.match('/admin/users'))
+        assert m.match('/content') == {'action':'index', 'controller':'content','id':None}
+        assert m.match('/users') == {'action':'index', 'controller':'users','id':None}
+        assert m.match('/admin/users') == {'action':'index', 'controller':'admin/users','id':None}
 
 class TestUtilsWithExplicit(unittest.TestCase):
     def setUp(self):
@@ -752,38 +771,51 @@ def test_url_for(self):
         con = self.con
         con.mapper_dict = {}
 
-        assert_raises(Exception, url_for, controller='blog')
-        assert_raises(Exception, url_for)
-        eq_('/blog/view/3', url_for(controller='blog', action='view', id=3))
-        eq_('https://www.test.com/viewpost', url_for(controller='post', action='view', protocol='https'))
-        eq_('http://www.test.org/content/view/2', url_for(host='www.test.org', controller='content', action='view', id=2))
+        with pytest.raises(Exception):
+            url_for(controller='blog')
+        with pytest.raises(Exception):
+            url_for()
+        assert url_for(controller='blog', action='view', id=3) == '/blog/view/3'
+        assert url_for(controller='post', action='view', protocol='https') == 'https://www.test.com/viewpost'
+        assert url_for(host='www.test.org', controller='content', action='view', id=2) == 'http://www.test.org/content/view/2'
 
     def test_url_for_with_defaults(self):
         con = self.con
         con.mapper_dict = {'controller':'blog','action':'view','id':4}
 
-        assert_raises(Exception, url_for)
-        assert_raises(Exception, url_for, controller='post')
-        assert_raises(Exception, url_for, id=2)
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        with pytest.raises(Exception):
+            url_for()
+        with pytest.raises(Exception):
+            url_for(controller='post')
+        with pytest.raises(Exception):
+            url_for(id=2)
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
         con.mapper_dict = {'controller':'blog','action':'view','year':2004}
-        assert_raises(Exception, url_for, month=10)
-        assert_raises(Exception, url_for, month=9, day=2)
-        assert_raises(Exception, url_for, controller='blog', year=None)
+        with pytest.raises(Exception):
+            url_for(month=10)
+        with pytest.raises(Exception):
+            url_for(month=9, day=2)
+        with pytest.raises(Exception):
+            url_for(controller='blog', year=None)
 
     def test_url_for_with_more_defaults(self):
         con = self.con
         con.mapper_dict = {'controller':'blog','action':'view','id':4}
 
-        assert_raises(Exception, url_for)
-        assert_raises(Exception, url_for, controller='post')
-        assert_raises(Exception, url_for, id=2)
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        with pytest.raises(Exception):
+            url_for()
+        with pytest.raises(Exception):
+            url_for(controller='post')
+        with pytest.raises(Exception):
+            url_for(id=2)
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
         con.mapper_dict = {'controller':'blog','action':'view','year':2004}
-        assert_raises(Exception, url_for, month=10)
-        assert_raises(Exception, url_for)
+        with pytest.raises(Exception):
+            url_for(month=10)
+        with pytest.raises(Exception):
+            url_for()
 
     def test_url_for_with_defaults_and_qualified(self):
         m = self.con.mapper
@@ -796,18 +828,23 @@ def test_url_for_with_defaults_and_qualified(self):
 
         self.con.environ = env
 
-        assert_raises(Exception, url_for)
-        assert_raises(Exception, url_for, controller='post')
-        assert_raises(Exception, url_for, id=2)
-        assert_raises(Exception, url_for, qualified=True, controller='blog', id=4)
-        eq_('http://www.example.com/blog/view/4', url_for(qualified=True, controller='blog', action='view', id=4))
-        eq_('/viewpost/4', url_for(controller='post', action='view', id=4))
+        with pytest.raises(Exception):
+            url_for()
+        with pytest.raises(Exception):
+            url_for(controller='post')
+        with pytest.raises(Exception):
+            url_for(id=2)
+        with pytest.raises(Exception):
+            url_for(qualified=True, controller='blog', id=4)
+        assert url_for(qualified=True, controller='blog', action='view', id=4) == 'http://www.example.com/blog/view/4'
+        assert url_for(controller='post', action='view', id=4) == '/viewpost/4'
 
         env = dict(SCRIPT_NAME='', SERVER_NAME='www.example.com', SERVER_PORT='8080', PATH_INFO='/blog/view/4')
         env['wsgi.url_scheme'] = 'http'
         self.con.environ = env
-        assert_raises(Exception, url_for, controller='post')
-        eq_('http://www.example.com:8080/blog/view/4', url_for(qualified=True, controller='blog', action='view', id=4))
+        with pytest.raises(Exception):
+            url_for(controller='post')
+        assert url_for(qualified=True, controller='blog', action='view', id=4) == 'http://www.example.com:8080/blog/view/4'
 
 
     def test_with_route_names(self):
@@ -818,13 +855,17 @@ def test_with_route_names(self):
         m.connect('category_home', 'category/:section', controller='blog', action='view', section='home')
         m.create_regs(['content','blog','admin/comments'])
 
-        assert_raises(Exception, url_for, controller='content', action='view')
-        assert_raises(Exception, url_for, controller='content')
-        assert_raises(Exception, url_for, controller='admin/comments')
-        eq_('/category', url_for('category_home'))
-        eq_('/category/food', url_for('category_home', section='food'))
-        assert_raises(Exception, url_for, 'home', controller='content')
-        eq_('/', url_for('home'))
+        with pytest.raises(Exception):
+            url_for(controller='content', action='view')
+        with pytest.raises(Exception):
+            url_for(controller='content')
+        with pytest.raises(Exception):
+            url_for(controller='admin/comments')
+        assert url_for('category_home') == '/category'
+        assert url_for('category_home', section='food') == '/category/food'
+        with pytest.raises(Exception):
+            url_for('home', controller='content')
+        assert url_for('home') == '/'
 
     def test_with_route_names_and_nomin(self):
         m = self.con.mapper
@@ -834,13 +875,17 @@ def test_with_route_names_and_nomin(self):
         m.connect('category_home', 'category/:section', controller='blog', action='view', section='home')
         m.create_regs(['content','blog','admin/comments'])
 
-        assert_raises(Exception, url_for, controller='content', action='view')
-        assert_raises(Exception, url_for, controller='content')
-        assert_raises(Exception, url_for, controller='admin/comments')
-        eq_('/category/home', url_for('category_home'))
-        eq_('/category/food', url_for('category_home', section='food'))
-        assert_raises(Exception, url_for, 'home', controller='content')
-        eq_('/', url_for('home'))
+        with pytest.raises(Exception):
+            url_for(controller='content', action='view')
+        with pytest.raises(Exception):
+            url_for(controller='content')
+        with pytest.raises(Exception):
+            url_for(controller='admin/comments')
+        assert url_for('category_home') == '/category/home'
+        assert url_for('category_home', section='food') == '/category/food'
+        with pytest.raises(Exception):
+            url_for('home', controller='content')
+        assert url_for('home') == '/'
 
     def test_with_route_names_and_defaults(self):
         m = self.con.mapper
@@ -851,9 +896,10 @@ def test_with_route_names_and_defaults(self):
         m.create_regs(['content','blog','admin/comments','building'])
 
         self.con.mapper_dict = dict(controller='building', action='showjacks', campus='wilma', building='port')
-        assert_raises(Exception, url_for)
-        eq_('/building/wilma/port/alljacks', url_for(controller='building', action='showjacks', campus='wilma', building='port'))
-        eq_('/', url_for('home'))
+        with pytest.raises(Exception):
+            url_for()
+        assert url_for(controller='building', action='showjacks', campus='wilma', building='port') == '/building/wilma/port/alljacks'
+        assert url_for('home') == '/'
 
     def test_with_resource_route_names(self):
         m = Mapper()
@@ -862,22 +908,25 @@ def test_with_resource_route_names(self):
         m.resource('message', 'messages', member={'mark':'GET'}, collection={'rss':'GET'})
         m.create_regs(['messages'])
 
-        assert_raises(Exception, url_for, controller='content', action='view')
-        assert_raises(Exception, url_for, controller='content')
-        assert_raises(Exception, url_for, controller='admin/comments')
-        eq_('/messages', url_for('messages'))
-        eq_('/messages/rss', url_for('rss_messages'))
-        eq_('/messages/4', url_for('message', id=4))
-        eq_('/messages/4/edit', url_for('edit_message', id=4))
-        eq_('/messages/4/mark', url_for('mark_message', id=4))
-        eq_('/messages/new', url_for('new_message'))
-
-        eq_('/messages.xml', url_for('formatted_messages', format='xml'))
-        eq_('/messages/rss.xml', url_for('formatted_rss_messages', format='xml'))
-        eq_('/messages/4.xml', url_for('formatted_message', id=4, format='xml'))
-        eq_('/messages/4/edit.xml', url_for('formatted_edit_message', id=4, format='xml'))
-        eq_('/messages/4/mark.xml', url_for('formatted_mark_message', id=4, format='xml'))
-        eq_('/messages/new.xml', url_for('formatted_new_message', format='xml'))
+        with pytest.raises(Exception):
+            url_for(controller='content', action='view')
+        with pytest.raises(Exception):
+            url_for(controller='content')
+        with pytest.raises(Exception):
+            url_for(controller='admin/comments')
+        assert url_for('messages') == '/messages'
+        assert url_for('rss_messages') == '/messages/rss'
+        assert url_for('message', id=4) == '/messages/4'
+        assert url_for('edit_message', id=4) == '/messages/4/edit'
+        assert url_for('mark_message', id=4) == '/messages/4/mark'
+        assert url_for('new_message') == '/messages/new'
+
+        assert url_for('formatted_messages', format='xml') == '/messages.xml'
+        assert url_for('formatted_rss_messages', format='xml') == '/messages/rss.xml'
+        assert url_for('formatted_message', id=4, format='xml') == '/messages/4.xml'
+        assert url_for('formatted_edit_message', id=4, format='xml') == '/messages/4/edit.xml'
+        assert url_for('formatted_mark_message', id=4, format='xml') == '/messages/4/mark.xml'
+        assert url_for('formatted_new_message', format='xml') == '/messages/new.xml'
 
     def test_with_resource_route_names_and_nomin(self):
         m = Mapper()
@@ -887,22 +936,25 @@ def test_with_resource_route_names_and_nomin(self):
         m.resource('message', 'messages', member={'mark':'GET'}, collection={'rss':'GET'})
         m.create_regs(['messages'])
 
-        assert_raises(Exception, url_for, controller='content', action='view')
-        assert_raises(Exception, url_for, controller='content')
-        assert_raises(Exception, url_for, controller='admin/comments')
-        eq_('/messages', url_for('messages'))
-        eq_('/messages/rss', url_for('rss_messages'))
-        eq_('/messages/4', url_for('message', id=4))
-        eq_('/messages/4/edit', url_for('edit_message', id=4))
-        eq_('/messages/4/mark', url_for('mark_message', id=4))
-        eq_('/messages/new', url_for('new_message'))
-
-        eq_('/messages.xml', url_for('formatted_messages', format='xml'))
-        eq_('/messages/rss.xml', url_for('formatted_rss_messages', format='xml'))
-        eq_('/messages/4.xml', url_for('formatted_message', id=4, format='xml'))
-        eq_('/messages/4/edit.xml', url_for('formatted_edit_message', id=4, format='xml'))
-        eq_('/messages/4/mark.xml', url_for('formatted_mark_message', id=4, format='xml'))
-        eq_('/messages/new.xml', url_for('formatted_new_message', format='xml'))
+        with pytest.raises(Exception):
+            url_for(controller='content', action='view')
+        with pytest.raises(Exception):
+            url_for(controller='content')
+        with pytest.raises(Exception):
+            url_for(controller='admin/comments')
+        assert url_for('messages') == '/messages'
+        assert url_for('rss_messages') == '/messages/rss'
+        assert url_for('message', id=4) == '/messages/4'
+        assert url_for('edit_message', id=4) == '/messages/4/edit'
+        assert url_for('mark_message', id=4) == '/messages/4/mark'
+        assert url_for('new_message') == '/messages/new'
+
+        assert url_for('formatted_messages', format='xml') == '/messages.xml'
+        assert url_for('formatted_rss_messages', format='xml') == '/messages/rss.xml'
+        assert url_for('formatted_message', id=4, format='xml') == '/messages/4.xml'
+        assert url_for('formatted_edit_message', id=4, format='xml') == '/messages/4/edit.xml'
+        assert url_for('formatted_mark_message', id=4, format='xml') == '/messages/4/mark.xml'
+        assert url_for('formatted_new_message', format='xml') == '/messages/new.xml'
 
 
 if __name__ == '__main__':
