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 数据库将调试信息写入 Visual Studio 调试输出吗?我尝试在 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 回答