1

私は現在RavenDBで調査しており、この簡単なテストをセットアップしています

<TestFixtureSetUp()>
Public Sub Setup()
    _embeddableDocumentStore = New EmbeddableDocumentStore With {.DataDirectory = "localdatabase"}
    _embeddableDocumentStore.Initialize()

End Sub

<Test> Public Sub CreateDB()
    Dim session = _embeddableDocumentStore.OpenSession()
    Dim results = session.Query(Of testclass)().ToList()

    For Each testclass In results
        session.Delete(testclass)
    Next
    session.SaveChanges()

    session.Store(New testclass With {.Id = 4, .Name = "177mdffarsdfdffds6t2in611"})
    session.Store(New testclass With {.Id = 2, .Name = "17fd7martrsdfdffds6t2in611"})
    session.Store(New testclass With {.Id = 3, .Name = "re177marsdfdfffdfds6t2in611"})
    session.SaveChanges()

    results = session.Query(Of testclass)().ToList()

    For Each testclass In results
        session.Delete(testclass)
    Next
    session.SaveChanges()        
    results = session.Query(Of testclass)().ToList()

    Assert.AreEqual(0, results.Count())
End Sub

<TestFixtureTearDown()>
Public Sub TearDown()
    _embeddableDocumentStore.Dispose()
    _embeddableDocumentStore = Nothing
End Sub

しかし、組み込みの RavenDB データベースを取得して、デバッグ情報をビジュアル スタジオのデバッグ出力に書き込むことはできますか? このコンテンツを含む bin\debug フォルダーに nlog.config を追加しようとしましたが、デバッグすると出力にクエリに関する情報が表示されません...何が間違っていますか?

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.netfx35.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target xsi:type="Console" Name="Console" />
  </targets>
  <rules>
    <logger name="Raven.Client.*" writeTo="Console"/>
  </rules>
</nlog>
4

1 に答える 1

2

私の貧弱な VB 翻訳を許してください。私は通常 C# で開発しています。

特に単体テストでのログインに関しては、抽象化レイヤーを使用して NLog を忘れる方がはるかに簡単だと思います。

Imports Raven.Abstractions.Logging

...

<TestFixtureSetUp>
Public Sub Setup()
    LogManager.RegisterTarget(Of DebugTarget)()
End Sub

Class DebugTarget
    Inherits Target

    Public Overrides Sub Write(logEvent As LogEventInfo)

        ' whatever you want to do
        If logEvent.Level >= LogLevel.Info Then

            Debug.WriteLine("{0} - {1} - {2}", _
                            logEvent.TimeStamp.ToLocalTime().ToString("hh:mm:ss.fff"), _
                            logEvent.Level, _
                            logEvent.FormattedMessage)
        End If

    End Sub

End Class

テスト全体に関しては、多くの問題があります。

  1. 単体テストはディスクに書き込みません。パフォーマンス コストが発生するだけでなく、複数のテストが互いに干渉する可能性があります。代わりにメモリ内で実行します。
  2. ドキュメント ストアにテストのセットアップ/ティアダウンを使用しないでください。各テストは、独自のメモリ内ドキュメント ストアを取得する必要があります。Usingステートメント ブロックに入れて、テストの完了時に破棄します。
  3. レコードを削除することによって、独自のクリーンアップを管理しようとしないでください。毎回きれいに始めてください。
  4. セッションは常にUsingステートメント ブロックに入れる必要があります。テストでも実際のコードでも。
  5. テストするときは、テストのアレンジ/アクト部分とアサート部分に別々のセッションを作成することをお勧めします。そうしないと、必ずしもデータベースの内容を確認しているとは限りません。セッションで追跡されている内容を確認しているだけかもしれません。
  6. 単体テストでは、常にWaitForNonStaleResultsすべてのクエリでカスタマイズを使用する必要があります。そうしないと、古い結果をテストしている可能性があります。 古い結果の詳細については、こちらをお読みください。

これは、適切に記述されたテストの完全な例です。

于 2013-01-15T17:22:16.703 に答える