本系列最後一篇,展示如何編寫單元測試驗證動態編譯執行引擎的正確性,涵蓋基本輸出、.NET 3.5 語法(LINQ、自動屬性)與參考組件載入。
using VSOnline.Framework;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
[TestClass]
public class CodeRunTest
{
[TestMethod]
public void RunTest()
{
var target = new CodeRun();
string code = @"
using System;
public class Program
{
public static void Main()
{
for (int i = 1; i <= 3; i++)
Console.Write(i);
}
}";
var expected = new List { "1", "2", "3" };
var actual = target.Run(code, "1");
Assert.IsTrue(expected.SequenceEqual(actual));
actual = target.Run(code, "2");
Assert.IsTrue(expected.SequenceEqual(actual));
}
[TestMethod]
public void Run35Test()
{
var target = new CodeRun();
string code = @"
using System;
using System.Linq;
public class Program
{
public static string Name { get; set; }
public static void Main()
{
Name = ""3"";
Console.Write(Name);
}
}";
var actual = target.Run(code, "1", "System.Core.dll");
Assert.AreEqual("3", actual[0]);
}
}
}
CodeRun 實例,避免狀態污染。Console.Write 產生的字串序列。Run35Test 指定 System.Core.dll 以支援 LINQ、自動屬性等 3.5 語法。Consoler.Outputs 字典鍵值。File.Delete、Process.Start 等危險 API,驗證權限管控。單元測試確保動態編譯引擎在基本功能、框架相容性、參考管理上正確運作。生產級線上 IDE 還需補強沙箱隔離、資源配額、程式碼分析與安全審計等模組。