我见过很少的示例sitecore应用程序,它们在业务逻辑中使用以下代码:
Database database = Factory.GetDatabase(itemUri.DatabaseName);
Assert.IsNotNull(database, itemUri.DatabaseName);
return database.GetItem(attribute);
有人可以澄清这是否是sitecore惯例。我只使用Assert进行单元测试,但不是在逻辑中。
感谢。
答案 0 :(得分:8)
我发现this article解决了您的大部分问题。有几个要点:
我认为同样重要的是要注意我在Sitecore博客中发现的许多示例都是无论如何都会发生异常的情况。因此,如果要省略ArgumentIsNotNull
,例如,那将导致NullObjectException
,因此Assert实际上会清除一些东西。在您的情况下,如果数据库不可用,这也会导致问题。 Assert使得错误的原因很明显。
答案 1 :(得分:5)
这是一个可以在sitecore.dll中使用的公约。如果不满足该条件,它将用于抛出异常。
例如,如果您查看Assert.IsTrue,如果不满足条件,系统将抛出" InvalidOperationException"
从搜索API中反编译一个方法我发现了这个。
Assert.IsTrue(local_0 != null, "SearchConfiguration is missing");
然后,如果我们解编译IsTrue,它会给我们
[AssertionMethod]
public static void IsTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] bool condition, string message)
{
if (!condition)
throw new InvalidOperationException(message);
}
要回答您的其他问题,您可以在应用程序代码中使用它,因为您可以看到它只是在不满足条件时抛出异常的另一种方法。
使用assert这个词会引起混淆,正如你所说的那样,通常在传统的c#.NET解决方案的单元测试环境中看到。只要您知道Sitecore声明在幕后做了什么,如果您想要使用它,它取决于您。