Ayende @ Rahien

Hi!
My name is Ayende Rahien
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:

ayende@ayende.com

+972 52-548-6969

, @ Q c

Posts: 5,949 | Comments: 44,548

filter by tags archive

NHProfAlive! It is alive!


I just finished writing the final test for the basic functionality that I want for NHibernate Profiler:

        [Test]
public void SelectBlogById()
{
ExecuteScenarioInDifferentProcess<SelectBlogByIdUsingCriteria>();
StatementModel selectBlogById = observer.Model.Sessions.First()
.Statements.First();
const string expected = @"SELECT this_.Id as Id3_0_,
this_.Title as Title3_0_,
this_.Subtitle as Subtitle3_0_,
this_.AllowsComments as AllowsCo4_3_0_,
this_.CreatedAt as CreatedAt3_0_
FROM Blogs this_
WHERE this_.Id = @p0

";
Assert.AreEqual(expected, selectBlogById.Text);
}

I actually had to invest some thought about the architecture of testing this. This little test has a whole set of ideas behind it, about which I'll talk about at a later date. Suffice to say that this test creates a new process, start to listen to interesting things that are going on there (populating the observer model with data).

Another interesting tidbit is that the output is formatted for readability. By default, NHiberante's SQL output looks something like this:

SELECT this_.Id as Id3_0_, this_.Title as Title3_0_, this_.Subtitle as Subtitle3_0_, this_.AllowsComments as AllowsCo4_3_0_, this_.CreatedAt as CreatedAt3_0_ FROM Blogs this_ WHERE this_.Id = @p0

This is pretty hard to read the moment that you have any sort of complex conditions.

More posts in "NHProf" series:

  1. (02 Dec 2008) What is the role of the DBA?
  2. (01 Dec 2008) The stack is not as simple as you wish it to be
  3. (21 Oct 2008) Logging interception
  4. (13 Oct 2008) Another milestone
  5. (13 Oct 2008) Alive! It is alive!

Comments

pb
pb

Would you consider the test to be overspecified since formatting changes would break this test which tests functionality?

Cory Foy

Not even formatting changes. This test will fail on Mono/Linux unless the code is compiled because all of those newlines are \r\n and Linux would be \n. Trust me - that was one of the most difficult challenges we faced with getting NUnit running. System.Environment.NewLine is your friend:

www.cornetdesign.com/.../...nvironmentnewline.html

Krzysztof Koźmic

Maybe it's time to introduce WhitespaceIgnoringStringComparer ? To NUnit, not Ayende's tool.

Ken Egozi

Is the code available anywhere?

Ayende Rahien

Ken,

This is going to be commercial, so I don't think so

pb
pb

I was thinking more along the lines of Query.HasColumns(new string[] { "Column1", "Column1").IsForTable("SomeTable"), etc.

Ayende Rahien

pb,

Can you explain more? I don't think that I follow you

pb
pb

Instead of checking the SQL string, check what the SQL string is based on so it isn't dependent on formatting changes, those auto generated aliases, etc., Maybe something like:

Assert.IsTrue(selectBlogById.HasTablesExact(new string[] {

"Blogs"

}));

Assert.IsTrue(selectBlogById.HasColumnsExact(new string[] {

"Id",

"Title",

"Subtitle",

"AllowsComments",

"CreatedAt"

}));

Comment preview

Comments have been closed on this topic.

FUTURE POSTS

No future posts left, oh my!

RECENT SERIES

  1. The RavenDB Comic Strip (3):
    28 May 2015 - Part III – High availability & sleeping soundly
  2. Special Offer (2):
    27 May 2015 - 29% discount for all our products
  3. RavenDB Sharding (3):
    22 May 2015 - Adding a new shard to an existing cluster, splitting the shard
  4. Challenge (45):
    28 Apr 2015 - What is the meaning of this change?
  5. Interview question (2):
    30 Mar 2015 - fix the index
View all series

RECENT COMMENTS

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats