diff --git a/src/connector/C#/src/test/FunctionTest/Subscribe.cs b/src/connector/C#/src/test/FunctionTest/Subscribe.cs
new file mode 100644
index 0000000000000000000000000000000000000000..57ded4a82f530b759b014f8109cd63246f2dfc3b
--- /dev/null
+++ b/src/connector/C#/src/test/FunctionTest/Subscribe.cs
@@ -0,0 +1,184 @@
+using TDengineDriver;
+using Test.UtilsTools;
+using System;
+using System.Collections.Generic;
+using Xunit;
+using Test.UtilsTools.DataSource;
+using System.Threading;
+using Xunit.Abstractions;
+using Test.Fixture;
+using Test.Case.Attributes;
+
+namespace Cases
+{
+ [TestCaseOrderer("XUnit.Case.Orderers.TestExeOrderer", "Cases.ExeOrder")]
+ [Collection("Database collection")]
+
+ public class SubscribeCases
+ {
+ DatabaseFixture database;
+
+ private readonly ITestOutputHelper output;
+
+ public SubscribeCases(DatabaseFixture fixture, ITestOutputHelper output)
+ {
+ this.database = fixture;
+ this.output = output;
+ }
+ /// xiaolei
+ /// SubscribeCases.ConsumeFromBegin
+ /// Subscribe a table and consume from beginning.
+ /// Subscribe.cs
+ /// pass or failed
+ [Fact(DisplayName = "SubscribeCases.ConsumeFromBegin()"), TestExeOrder(1), Trait("Category", "Without callback")]
+ public void ConsumeFromBegin()
+ {
+ IntPtr conn = database.conn;
+ IntPtr _res = IntPtr.Zero;
+
+ var tableName = "subscribe_from_begin";
+ var createSql = $"create table if not exists {tableName}(ts timestamp,bl bool,i8 tinyint,i16 smallint,i32 int,i64 bigint,bnr binary(50),nchr nchar(50))tags(t_i32 int,t_bnr binary(50),t_nchr nchar(50))";
+ var dropSql = $"drop table if exists {tableName}";
+
+ var colData = new List