tSQLt AssertEqualsTable支持Geography数据类型

时间:2012-08-21 22:39:10

标签: tsqlt

当我创建两个包含地理列并使用的表时 tSQlt.AssertEqualsTable,测试失败:

  

失败:数据类型的运算符无效。运算符等于,类型   等于地理。{,1}

有没有人知道tSQLt是否支持表格比较的地理数据类型?

2 个答案:

答案 0 :(得分:2)

从那时起,tSQLt已经更新,以包含针对不兼容数据类型的更详细的错误消息。如果您使用其中一种不兼容的数据类型,您应该看到以下消息:

(Error) The table contains a datatype that is not supported for 
tSQLt.AssertEqualsTable. Please refer to http://tsqlt.org/user-
guide/assertions/assertequalstable/ for a list of unsupported datatypes.

不兼容类型列表为:

  • XML
  • 文本
  • NTEXT
  • 图像
  • 地理
  • 几何
  • Rowversion
  • 未标记为Comparable和Byte Ordered的任何CLR数据类型

然而,几乎总有一种解决方法。您可以在比较之前将值转换为兼容的数据类型,如下例所示:

EXEC tSQLt.NewTestClass 'DeliveryTests';
GO

CREATE PROCEDURE DeliveryTests.[test Order is matched to Customer location]
AS
BEGIN
  EXEC tSQLt.FakeTable 'Sales.Customers';
  EXEC tSQLt.FakeTable 'Sales.Orders';

  INSERT INTO Sales.Customers (CustomerId, Location) 
       VALUES (1, geography::Point(47.65100, -122.34900, 4326));
  INSERT INTO Sales.Orders (OrderId, CustomerId) 
    VALUES (5, 1);

  SELECT OrderId, Location.ToString() AS Location
    INTO DeliveryTests.Actual
    FROM Delivery.OrderDestinations;

  SELECT TOP(0) *
    INTO DeliveryTests.Expected
    FROM DeliveryTests.Actual;

  INSERT INTO DeliveryTests.Expected (OrderId, Location) 
     VALUES (5, geography::Point(47.65100, -122.34900, 4326).ToString());

  EXEC tSQLt.AssertEqualsTable 'DeliveryTests.Expected', 
                               'DeliveryTests.Actual';
END;
GO

答案 1 :(得分:0)

目前尚不支持,但将包含在下一个/将来的版本中。