The unit tests transform all `CREATE TABLE` and `DROP TABLE` queries to `CREATE TEMPORARY TABLE` and `DROP TEMPORARY TALBE`, respectively. So in your `tearDown` the query will attempt to drop temporary tables with those names, but not the actual tables. To fix this, add this before your `DROP` queries:

    remove_filter( 'query', array( $this, '_drop_temporary_tables' ) );

You may also need to add this before your `CREATE TABLE` queries:

    remove_filter( 'dbdelta_create_queries', array( $this, '_create_temporary_tables' ) );


The `WP_UnitTestCase::_create_temporary_tables()` function is the one that filters the queries to make tables temporary. It is added in the `setUp()`, and removed in the `tearDown()`.

#Update:#

The `_create_temporary_tables()` function is now hooked to the `'query'` filter, instead of `'dbdelta_create_queries'`. See [changeset 27041][1]. So now to remove it you would do:

    remove_filter( 'query', array( $this, '_create_temporary_tables' ) );



  [1]: https://core.trac.wordpress.org/changeset/27041