1

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

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

有谁知道 tSQLt 是否支持用于表比较的地理数据类型?

4

2 回答 2

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
  • 文本
  • 文本
  • 图片
  • 地理
  • 几何学
  • 行版本
  • 任何未标记为 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
于 2013-10-20T16:34:03.820 回答
0

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

于 2012-08-22T07:58:15.367 回答