I know very little about about NH so any NH heads here please do wade in and
give Simone a lift.

Simone, the rollback is likely failing so so the data is being added in your
test but then MbUnit can't complete the rollback when it's added off to COM+
to attempt the rollback. There may be some kind of locking going on with
both NH and MbUnit trying to talk to the transaction manager.

A few things I would try.

   - If it is possible to use .NET 2.0 with what your doing, take a look
   at Rollback2 in MbUnit.Framework.2.0.dll which uses the
   MbUnit.Framework.TransactionScope and may help.
   - If possible run NH in a non transactional mode to see if MbUnit if
   there is a conflict and not a setup or config issue.
   - If the error is still ocurring then its likely a setup or config
   issue (
   http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=230390&SiteID=1)

Again any NH heads I'd appreicate you giving Simone a lift.

Andy


On 6/11/07, Simone Chiaretta <[EMAIL PROTECTED]> wrote:
>
> Adding a few more info:
>
>
> If I don't call CommitTransaction() at the end then I cannot run other
> test in the same test fixture because the transaction is already open.
>
> If I call RollbackTransaction, the I probably don't need the [RollBack]
> attribute any more since I'm handling the transaction myself.
>
> Is that right? or am I missing something somewhere?
> Simo
>
> On 6/11/07, Simone Chiaretta <[EMAIL PROTECTED] > wrote:
> >
> > Hi all,
> > I'm implementing the DB testing of my application, that uses NHibernate
> > as persistence method.
> >
> > I like the RollBack attribute of MbUnit because I cannot use a real dev
> > DB, but I can only work on the "testing" db, and I cannot put real data on
> > it.
> >
> > But it doesn't work with NHibernate.
> >
> > let me explain with 2 different examples:
> >
> > 1 - Plain test as I used to do using a "normal" Ado repository
> >
> >
> >    [TestFixture]
> >    [TestsOn(typeof(UsersPersistenceService))]
> >    public class UserPersistenceFixtures
> >    {
> >       UsersPersistenceService _service;
> >
> >       [SetUp]
> >       public void SetUp()
> >       {
> >          _service = new UsersPersistenceService();
> >       }
> >
> >
> >       [Test]
> >       [RollBack]
> >       public void AddUser()
> >       {
> >          User target = new User();
> >          target.Name = "Name";
> >          target.EmailAddress = " [EMAIL PROTECTED]";
> >          _service.Add(target);
> >
> >          User newUser = _service.GetById(target.Id);
> >
> >          Assert.AreEqual(target.Id, newUser.Id);
> >          Assert.AreEqual("Name", newUser.Name);
> >       }
> >
> >       [TearDown]
> >       public void TearDown()
> >       {
> >          NHibernateSessionManager.Instance.CloseSession();
> >       }
> >
> >
> > I get the error:
> > System.Runtime.InteropServices.COMException
> > The partner transaction manager has disabled its support for
> > remote/network transactions. (Exception from HRESULT: 0x8004D025)
> >
> > and the test is never executed
> >
> > 2 - Open a transaction context on the current NH session
> >
> >    [TestFixture]
> >    [TestsOn(typeof(UsersPersistenceService))]
> >    public class UserPersistenceFixtures
> >    {
> >       UsersPersistenceService _service;
> >
> >       [SetUp]
> >       public void SetUp()
> >       {
> >          NHibernateSessionManager.Instance.BeginTransaction();
> >          _service = new UsersPersistenceService();
> >       }
> >
> >
> >       [Test]
> >       [RollBack]
> >       public void AddUser()
> >       {
> >          User target = new User();
> >          target.Name = "Name";
> >          target.EmailAddress = " [EMAIL PROTECTED]";
> >          _service.Add(target);
> >
> >          User newUser = _service.GetById(target.Id);
> >
> >          Assert.AreEqual(target.Id, newUser.Id);
> >          Assert.AreEqual("Name", newUser.Name);
> >       }
> >
> >       [TearDown]
> >       public void TearDown()
> >       {
> >          NHibernateSessionManager.Instance.CommitTransaction();
> >          NHibernateSessionManager.Instance.CloseSession();
> >       }
> >
> > The test executes, but the data are store to the db.
> >
> > Any idea on how to make it work? Shouldn't the MbUnit rollback happen
> > before the commit, so rolling back the transaction before the commit
> > happens?
> >
> > Cheers
> > Simone
> >
> > --
> > Simone Chiaretta
> > codeclimber.net.nz
> > Any sufficiently advanced technology is indistinguishable from magic
> > "Life is short, play hard"
> >
> >
>
>
> --
> Simone Chiaretta
> codeclimber.net.nz
> Any sufficiently advanced technology is indistinguishable from magic
> "Life is short, play hard"
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"MbUnit.User" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/MbUnitUser?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to