2017-08-14 113 views
12

我有一個創建Microsoft.SqlServer.Management.Smo.Database類型的數據庫集成測試:C#SMO數據庫不日誌創建

var defaultConnectionConnectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); 
var sqlConnection = new SqlConnection(defaultConnectionConnectionString); 
var serverConnection = new ServerConnection(sqlConnection); 
_server = new Server(serverConnection); 
_database = new Database(_server, _integrationTestingDatabaseName); 
_database.Create(); 

當我運行通過CLI爲NUnit的,測試結束時,用SQL的集成測試創建數據庫被轉儲到控制檯。這混亂了輸出,並不是我想在運行這個集成測試時看到的東西。我怎樣才能阻止這種情況發生?

+1

當我運行上面的控制檯應用程序(VS2015/Smo的12.0),我沒有得到任何SQL輸出。你是否也在控制檯應用程序中看到相同的行爲?這是否僅在使用NUnit CLI運行時纔會發生?實際上,對於我來說,我希望看到生成的SQL記錄!另外,你的Smo組件的版本是什麼? – Subbu

+1

您是否打算回答上述問題? –

回答

3

這是一個鵝的追逐,不能複製。

我猜可能有些混淆,也許你的腳本中有一個是SQL Print或者一些這樣的紅鯡魚。因爲執行此單元測試以通過Sql Management Objects創建SQL dB,而不是輸出SQL創建腳本。

enter image description here

甚至直接在命令行中執行不記錄SQL創建腳本。這裏是攝製:

using NUnit.Framework; 
using ConsoleApplication1; 
using System.IO; 
using System.Diagnostics; 

[TestFixture] 
public class UnitTest1 
{  
    static FileStream objStream; 

    [SetUp] 
    public static void Setup() 
    { 
     objStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\AAA_Output.txt", FileMode.OpenOrCreate); 
     TextWriterTraceListener objTraceListener = new TextWriterTraceListener(objStream); 
     Trace.Listeners.Add(objTraceListener); 
     Trace.WriteLine("==================================="); 
     Trace.WriteLine("App Start:" + DateTime.Now); 
     Trace.WriteLine("==================================="); 
    } 

    [TestCase] 
    public void TestMethod1() 
    { 
     Program.CreateDB(); 
    } 

    [TearDown] 
    public static void TearDown() 
    { 
     Trace.Flush(); 
     objStream.Close(); 
    } 
} 

結果:

enter image description here