以下是來自Pex Documentation pexandcontracts.pdf http://research.microsoft.com/en-us/projects/pex/pexandcontracts.pdf的代碼示例。我意識到這不是pex的具體問題,而是它涉及代碼合同,但它是來自pex教程的代碼。在點Contract.Result()的endsWith(後綴)(1)和點(2):Pex和代碼合同
namespace CodeDigging
{
public class StringExtension
{
public static string TrimAfter(string value, string suffix)
{
// <pex>
Contract.Requires(!string.IsNullOrEmpty(suffix));
// </pex>
Contract.Requires(value != null);
Contract.Ensures(!Contract.Result<string>().EndsWith(suffix));
int index = value.IndexOf(suffix);
if (index < 0)
return value; // (1) First possible contract violation
return value.Substring(0, index); // (2) second possible contract violation
}
}
}
靜態驗證提供了以下警告:
CodeContracts:確保未經證實!。
我的問題是,如何解決這個問題呢?根據pex探索,合同不可能被違反。 (...有沒有?)
我傾向於同意(因此我的問題的原因)。請提供一個示例實施,我會將您的答案標記爲正確。儘管如此,仍然需要輸入。 –