我是单元测试的新手,尤其是NUit.我只是在本书中输入一些引用Java和JUnit的例子.但我正在使用C#代替.
问题是:我有一个带有覆盖方法的类,例如Equals()和GetHashCode(),但是当我试图比较这个类的两个对象时,Assert.AreEqual()我的代码没有被调用,所以我得到一个异常.
Assert.True(MyClass.Equals(MyClass2))确实运作良好.但我不想用这种结构代替Assert.AreEqual().问题出在哪里?
这是班级:
public class Money
{
public int amount;
protected string currency;
public Money(int amount, string currency)
{
this.amount = amount;
this.currency = currency;
}
public new bool Equals(object obj)
{
if (obj == null)
return false;
Money money = (Money)obj;
return (amount == money.amount)
&& (Currency().Equals(money.Currency()));
}
public new int GetHashCode()
{
return (string.Format("{0}{1}", amount, currency)).GetHashCode();
}
public static Money Dollar(int amount)
{
return new Money(amount, "USD");
} …Run Code Online (Sandbox Code Playgroud) 注入@Named bean的所有会话对象是否可以全局设置会话超时?
我有几个@ConversationScoped bean,例如:
import javax.annotation.PostConstruct;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@ConversationScoped
public class SomeBean1 {
@Inject
private Conversation conversation;
@PostConstruct
private void init() {
if (conversation.isTransient()) {
conversation.begin();
}
}
}
@Named
@ConversationScoped
public class SomeBean2 {
@Inject
private Conversation conversation;
@PostConstruct
private void init() {
if (conversation.isTransient()) {
conversation.begin();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些对话的默认超时为600000毫秒.我想知道是否有任何方法可以在全局设置会话的超时,或者我需要在每个bean中设置它
if (!conversation.isTrainsient()) {
conversation.setTimeout(MY_CUSTOM_TIMEOUT);
}
Run Code Online (Sandbox Code Playgroud)
(问题是有很多CDI bean并且每个人手动设置超时都不是最佳解决方案)