首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

簡易線上 C# IDE 實作(三):單元測試與驗證

     編輯:關於C語言

前言

本系列最後一篇,展示如何編寫單元測試驗證動態編譯執行引擎的正確性,涵蓋基本輸出、.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 語法。
  • ID 參數:區分並行執行的多個編譯任務,對應 Consoler.Outputs 字典鍵值。

擴充測試建議

  1. 編譯錯誤處理:傳入語法錯誤程式碼,驗證回傳錯誤訊息而非拋出例外。
  2. 逾時與資源限制:測試無限迴圈、大量記憶體配置代碼,確認沙箱機制有效。
  3. 安全性:嘗試 File.Delete、Process.Start 等危險 API,驗證權限管控。
  4. 效能基準:測量編譯+執行延遲,作為優化基準。

結語

單元測試確保動態編譯引擎在基本功能、框架相容性、參考管理上正確運作。生產級線上 IDE 還需補強沙箱隔離、資源配額、程式碼分析與安全審計等模組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved