﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Namespace Lucene.Net.Util
   | Apache Lucene.NET 4.8.0-beta00010 Documentation </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Namespace Lucene.Net.Util
   | Apache Lucene.NET 4.8.0-beta00010 Documentation ">
    <meta name="generator" content="docfx 2.56.0.0">
    
    <link rel="shortcut icon" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/logo/favicon.ico">
    <link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.css">
    <link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.css">
    <link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.css">
    <meta property="docfx:navrel" content="toc.html">
    <meta property="docfx:tocrel" content="test-framework/toc.html">
    
    <meta property="docfx:rel" content="https://lucenenet.apache.org/docs/4.8.0-beta00009/">
    
  </head>
  <body data-spy="scroll" data-target="#affix" data-offset="120">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="/">
                <img id="logo" class="svg" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/logo/lucene-net-color.png" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search">
            <ul class="level0 breadcrumb">
                <li>
                    <a href="https://lucenenet.apache.org/docs/4.8.0-beta00009/">API</a>
                     <span id="breadcrumb">
                        <ul class="breadcrumb">
                          <li></li>
                        </ul>
                    </span>   
                </li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list"></div>
          <div class="sr-items">
            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
          </div>
          <ul id="pagination"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="Lucene.Net.Util">
  
  <h1 id="Lucene_Net_Util" data-uid="Lucene.Net.Util" class="text-break">Namespace Lucene.Net.Util
  </h1>
  <div class="markdown level0 summary"></div>
  <div class="markdown level0 conceptual"></div>
  <div class="markdown level0 remarks"></div>
    <h3 id="classes">Classes
  </h3>
      <h4><a class="xref" href="Lucene.Net.Util.AbstractBeforeAfterRule.html">AbstractBeforeAfterRule</a></h4>
      <section><p>LUCENENET specific for mimicking the JUnit rule functionality.
We simplify things by just running the rules inside LuceneTestCase.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.ApiScanTestBase.html">ApiScanTestBase</a></h4>
      <section><p>LUCENENET specific - functionality for scanning the API to ensure
naming and .NET conventions are followed consistently. Not for use
by end users.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.BaseDocIdSetTestCase-1.html">BaseDocIdSetTestCase&lt;T&gt;</a></h4>
      <section><p>Base test class for <span class="xref">Lucene.Net.Search.DocIdSet</span>s. </p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.CultureInfoSupport.html">CultureInfoSupport</a></h4>
      <section></section>
      <h4><a class="xref" href="Lucene.Net.Util.English.html">English</a></h4>
      <section><p>Converts numbers to english strings for testing.
<p>
<div class="lucene-block lucene-internal">This is a Lucene.NET INTERNAL API, use at your own risk</div></section>
      <h4><a class="xref" href="Lucene.Net.Util.ExceptionSerializationTestBase.html">ExceptionSerializationTestBase</a></h4>
      <section></section>
      <h4><a class="xref" href="Lucene.Net.Util.FailOnNonBulkMergesInfoStream.html">FailOnNonBulkMergesInfoStream</a></h4>
      <section><p>Hackidy-Häck-Hack to cause a test to fail on non-bulk merges </p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LineFileDocs.html">LineFileDocs</a></h4>
      <section><p>Minimal port of benchmark&apos;s LneDocSource +
DocMaker, so tests can enum docs from a line file created
by benchmark&apos;s WriteLineDoc task</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.html">LuceneTestCase</a></h4>
      <section><p>LUCENENET specific extensions to <a class="xref" href="Lucene.Net.Util.LuceneTestCase.html">LuceneTestCase</a> to make it easier to port tests
from Java with fewer changes.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.AwaitsFixAttribute.html">LuceneTestCase.AwaitsFixAttribute</a></h4>
      <section><p>Attribute for tests which exhibit a known issue and are temporarily disabled.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.ConcurrentMergeSchedulerFactories.html">LuceneTestCase.ConcurrentMergeSchedulerFactories</a></h4>
      <section><p>Contains a list of the Func&lt;IConcurrentMergeSchedulers&gt; to be tested.
Delegate method allows them to be created on their target thread instead of the test thread
and also ensures a separate instance is created in each case (which can affect the result of the test).
<p>
The <span class="xref">Lucene.Net.Index.TaskMergeScheduler</span> is only rarely included.
<p>
LUCENENET specific for injection into tests (i.e. using NUnit.Framework.ValueSourceAttribute)</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.NightlyAttribute.html">LuceneTestCase.NightlyAttribute</a></h4>
      <section><p>Attribute for tests that should only be run during nightly builds.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.SlowAttribute.html">LuceneTestCase.SlowAttribute</a></h4>
      <section><p>Attribute for tests that are slow. Slow tests do run by default but can be
disabled if a quick run is needed.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.SuppressCodecsAttribute.html">LuceneTestCase.SuppressCodecsAttribute</a></h4>
      <section><p>Attribute for test classes that should avoid certain codec types
(because they are expensive, for example).</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.SuppressTempFileChecksAttribute.html">LuceneTestCase.SuppressTempFileChecksAttribute</a></h4>
      <section><p>Marks any suites which are known not to close all the temporary
files. This may prevent temp files and folders from being cleaned
up after the suite is completed.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestCase.WeeklyAttribute.html">LuceneTestCase.WeeklyAttribute</a></h4>
      <section><p>Attribute for tests that should only be run during weekly builds.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html">LuceneTestFrameworkInitializer</a></h4>
      <section><p><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html">LuceneTestFrameworkInitializer</a> may be subclassed by end users in order to
use standard dependency injection techniques for classes under test. A subclass of <a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html">LuceneTestFrameworkInitializer</a>
will be executed automatically by NUnit. To work properly with the Lucene.NET test framework, the subclass
must be placed outside of all namespaces, which ensures it is only executed 1 time per test assembly.
<p>
The following abstract factories can be overridden for testing purposes:
<table><thead><tr><th>AbstractionFactory Method NameDefault</th><th></th></tr></thead><tbody><tr><td><span class="xref">Lucene.Net.Codecs.ICodecFactory</span><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html#Lucene_Net_Util_LuceneTestFrameworkInitializer_CodecFactory">CodecFactory</a><a class="xref" href="Lucene.Net.Codecs.TestCodecFactory.html">TestCodecFactory</a></td><td></td></tr><tr><td><span class="xref">Lucene.Net.Codecs.IDocValuesFormatFactory</span><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html#Lucene_Net_Util_LuceneTestFrameworkInitializer_DocValuesFormatFactory">DocValuesFormatFactory</a><a class="xref" href="Lucene.Net.Codecs.TestDocValuesFormatFactory.html">TestDocValuesFormatFactory</a></td><td></td></tr><tr><td><span class="xref">Lucene.Net.Codecs.IPostingsFormatFactory</span><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html#Lucene_Net_Util_LuceneTestFrameworkInitializer_PostingsFormatFactory">PostingsFormatFactory</a><a class="xref" href="Lucene.Net.Codecs.TestPostingsFormatFactory.html">TestPostingsFormatFactory</a></td><td></td></tr><tr><td><span class="xref">Lucene.Net.Configuration.IConfigurationFactory</span><a class="xref" href="Lucene.Net.Util.LuceneTestFrameworkInitializer.html#Lucene_Net_Util_LuceneTestFrameworkInitializer_ConfigurationFactory">ConfigurationFactory</a><span class="xref">Lucene.Net.Configuration.TestConfigurationFactory</span></td><td></td></tr></tbody></table>
<p>
<strong>Example:</strong></p>
<pre><code>// IMPORTANT: Do not put the initializer in a namespace
public class MyTestFrameworkInitializer : LuceneTestFrameworkInitializer
{
    protected override IConfigurationFactory LoadConfigurationFactory()
    {
        // Inject a custom configuration factory
        return new MyConfigurationFactory();
    }

    protected override void TestFrameworkSetUp()
    {
        // Inject a custom configuration factory
        ConfigurationFactory = new MyConfigurationFactory();

        // Do any additional dependency injection setup here
    }
}</code></pre>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.NullInfoStream.html">NullInfoStream</a></h4>
      <section><p>Prints nothing. Just to make sure tests pass w/ and without enabled <span class="xref">Lucene.Net.Util.InfoStream</span>
without actually making noise.
<p>
<div class="lucene-block lucene-experimental">This is a Lucene.NET EXPERIMENTAL API, use at your own risk</div></section>
      <h4><a class="xref" href="Lucene.Net.Util.StackTraceHelper.html">StackTraceHelper</a></h4>
      <section><p>LUCENENET specific class to normalize stack trace behavior between different .NET Framework and .NET Standard 1.x,
which did not support the StackTrace class.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.TestUtil.html">TestUtil</a></h4>
      <section><p>General utility methods for Lucene unit tests.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.ThrottledIndexOutput.html">ThrottledIndexOutput</a></h4>
      <section><p>Intentionally slow <span class="xref">Lucene.Net.Store.IndexOutput</span> for testing.</p>
</section>
      <h4><a class="xref" href="Lucene.Net.Util.TimeUnits.html">TimeUnits</a></h4>
      <section><p>Time unit constants for use in annotations. </p>
</section>
</article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <div class="contribution">
                <ul class="nav">
                </ul>
              </div>
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            Copyright © 2020 Licensed to the Apache Software Foundation (ASF)
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.js"></script>
    <script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.js"></script>
  </body>
</html>
