DROP DATABASE statement cannot be used inside a user transaction
Create a separate initializer that drops the database if it exists, then creates the database outside of any transaction handling code.  If this fails for any reason, you could (probably) just fail the test right then and investigate why it failed.

From MSDN:


  The CREATE DATABASE statement must run in autocommit mode (the default transaction management mode) and is not allowed in an explicit or implicit transaction.


If you want, you could do this for each individual test:


DROP DATABASE if it exists
CREATE DATABASE
&nbsp;Create necessary DDL 
&nbsp;Run DML unit test
DROP DATABASE


However, that would be overkill.  I'd simply create the database at the start of all tests, and drop it at the end.  Each unit test could be wrapped in a transaction which is either rolled-back or committed, depending on the requirements of further tests.

I looked for a resource that explains why CREATE DATABASE cannot be used inside a transaction, but I couldn't find one. Kenneth Fisher provided the following TechNet link, which shows all commands that won't work in a transaction:

Transact-SQL Statements Allowed in Transactions

Our guess is that a lot of them aren't allowed because they affect the file system, which is not transactional.