使用WCF Web编程模型可以指定操作合同,如下所示:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs2={qs2}")]
XElement SomeRequest1(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)
现在,如果我们必须签订一个接受具有相同名称的参数数组(在这种情况下为qs1)的合同,那么......
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SomeRequest?qs1={qs1}&qs1={qs2}")]
XElement SomeRequest2(string qs1, string qs2);
Run Code Online (Sandbox Code Playgroud)
当我们调用方法时,我们在运行时收到错误消息:
查询字符串必须具有唯一名称的"name = value"对.请注意,名称不区分大小写.有关更多详细信息,请参阅UriTemplate的文档.
如何定义一个HTTP服务,该服务使用参数数组公开资源,而不需要使用loosey-goosey接口?
我的很多函数在声明之下都有一大堆验证代码:
if ( ! (start < end) ) {
throw new IllegalStateException( "Start must be before end." );
}
Run Code Online (Sandbox Code Playgroud)
我想精确地指定某些输入的有效范围 - 例如A> B,C => 1或str_d.length()> 0.
鉴于我的一些函数有很多必须经过验证的论证,我最终可能会编写大量的样板来验证前置条件.我正在编写一个主要由非技术开发人员使用的库,我们发现验证函数输入是帮助我们的用户正确操作API的最佳方法.我们越早提出错误,客户就越不需要做的工作.
是否有更优雅的方法来指定我的方法中的前置条件,后置条件(以及可能的不变条件).
一位同事告诉我有关Eiffel编程语言的一个特性,它允许以非常自然的方式描述前/后/不变条件,而无需重复大量的样板代码.是否有Java语言的附加组件,这将允许我使用这些魔术?
我想知道是否有任何人在设计WCF合同方面有一些很好的提示/注意事项,而不是在旧的Microsoft Web服务技术(例如WSE)和非Microsoft技术(例如WSE)方面. Java调用WCF Web服务.
例如:在将DateTime作为合同中的类型公开时,是否需要考虑任何特殊规则?字典和Hashtables怎么样?您可能遇到的各种绑定有哪些问题?
我有兴趣研究最近接受的C++ 20合同编程,用于学习和调查目的.
当我正在寻找编译器支持时,我很失望,没有找到任何.双方gcc并clang都相当明确表示,他们不其内支持此功能--std=c++2a模式.
由于批准是最近的,我不会惊讶于当前的编译器不支持所提出的确切语义.更令我惊讶的是,绝对没有任何东西,即使是特定于编译器的扩展,即使在有限的方式下也会模仿相同的功能.
我期待C++委员会只考虑在现场证明自己的功能,通常是通过编译器或目标特定扩展.批准C++ 20的此功能表明该功能应该可以在某处访问.但到目前为止,我一直无法找到它.
目前有没有办法试验C++合同编程?甚至使用一组特定于编译器的扩展?
我注意到Microsoft以一种奇怪的方式在.NET 4中命名了他们与代码契约相关的函数.
他们在"require"和"ensure"的末尾加上"s",所以有Contract.Requires()和Contract.Ensures(),但不是在"断言"和"假设"的末尾,所以有契约.Assert()和Contract.Assume().差异让我有点困惑.
事实上,我真正的问题是,我正在尝试在PHP中使用代码契约,所以我写了一些东西来模仿.NET 4中的"契约"类.由于PHP没有内置方法来验证参数的类型,我在自己的Contract类中添加了一个方法来进行一些验证.我选择"expect"这个词,因为我认为"期望参数'bar'是字符串但是..."是参数类型错误时的常见消息.问题来了.我应该将我的方法命名为Contract.Expect()还是应该将其命名为Contract.Expects()?
我来自一个非英语国家,对不起我的英语很差.可能它实际上是一个英语问题,但我认为只有程序员可以帮助我.如果这个问题不合适,那就很抱歉.
我最近看过集成测试是 JB Rainsberger 的骗局,我现在正在寻找关于这个主题的更多资料.我不得不说,我对我们做错了多少感到震惊(即我们应该进行单元测试的集成测试),对Rainsberger描述的概念很感兴趣,但也对如何应用它们感到困惑.我想有更多描述的协作测试和合同测试,但我不知道从哪里开始.
唯一困扰我的是测试需要提出的4个问题:
A面:
Do I ask the right question?
Can I deal with the answer?
Run Code Online (Sandbox Code Playgroud)
B面:
Can I answer a question?
Do I answer correctly?
Run Code Online (Sandbox Code Playgroud)
但是我如何将它应用于我的应用程序堆栈中的一些随机方法?
是否有一本书或教程或示例,它们采用了一个真实世界的例子并应用了这些孤立微测试的想法?理想情况下,该示例使用Java,C#或C++.
任何涉及这些概念的文献总体上可以帮助我更好地理解它们.
此外,如果有论坛,我可以询问有关如何进行正确的单元测试的更详细的问题,甚至可能重构现有的代码和帖子示例会很好.
谢谢!
collaboration testing integration-testing unit-testing contract
我得到以下选项,如"添加方法合同'setDisplayHomeAsUpEnabled'",我知道检查是因为NPE可以扔掉getSupportActionBar()但我想知道方法合同的实际使用
如果我在该选择上按Enter键,我将得到:
任何分享?任何帮助?它会赞赏:)
我开发了一个基于Web的应用程序,公司对许可感兴趣.我怀疑他们打算使用他们想要的功能,并添加到他们现有的代码库中,因此许可证很可能是一次性的.因为它是在运行时解释的,所以我必须翻转源代码,并且我不能立即明白我可以以任何方式保护它.
为了增加一层复杂性,我有许多用户表示有兴趣将其用作服务,因此我一直致力于基于订阅的版本.这是一个利基市场,因此增长潜力有限,但我不想卖空.
我通常每小时出售我的服务,所以我不知道授权代码的第一件事.
我正在努力解决的问题是:
我敢肯定还有几十个我应该问的问题.我该怎么想?
提前致谢.
- 谢谢回复,全部 -
我想强制一个结构对于某个合同始终有效,由构造函数强制执行.但是,default运营商违反了合同.
请考虑以下情况,例如:
struct NonNullInteger
{
private readonly int _value;
public int Value
{
get { return _value; }
}
public NonNullInteger(int value)
{
if (value == 0)
{
throw new ArgumentOutOfRangeException("value");
}
_value = value;
}
}
// Somewhere else:
var i = new NonNullInteger(0); // Will throw, contract respected
var j = default(NonNullInteger); // Will not throw, contract broken
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我将结构更改为类,因此我可以确保在初始化新实例时始终调用构造函数.但我想知道,是否绝对没有办法获得与结构相同的行为?
我有两个不同的文件,即 Project1.sol 和 Project2.sol
Project2.sol 就像:
import "./Project1.sol";
contract Project2{
address newProject1Address =address(new Project1());
}
Run Code Online (Sandbox Code Playgroud)
Project1.sol 类似于:
import "./Project2.sol";
contract Project1 is Project2{
}
Run Code Online (Sandbox Code Playgroud)
我已在 Project2.sol 文件中部署了 Project1。而且我一直在使用 Project1.sol 文件中 Project2 中的结构。
我收到一个错误,即“基础的定义必须先于派生合同的定义。 ”对于这一行:contract Project1 is Project2{
网上查了一下错误,有两份合同一份文件的解决方案。但是,我有两个文件。
我将这两个合同合并在一个文件中。
这就是我所做的:
pragma solidity >=0.7.0 <0.9.0;
contract Project2{
Apple[] public applepies;
struct Apple{
string name;
mapping (address => bool) applepie;
}
function createProject() external{
address newProject1Address =address(new Project1(msg.sender));
uint idx = applepies.length;
applepies.push();
Apple storage newProject = applepies[idx];
}
} …Run Code Online (Sandbox Code Playgroud) contract ×10
.net ×2
wcf ×2
android ×1
annotations ×1
c# ×1
c++ ×1
c++20 ×1
clang ×1
datacontract ×1
eiffel ×1
ethereum ×1
gcc ×1
inheritance ×1
interop ×1
java ×1
licensing ×1
rest ×1
solidity ×1
struct ×1
testing ×1
unit-testing ×1
web-services ×1