这可能不是甚至可能的事情,但我想我还是会问.反正我是否存在这个方法,以便使用我正在测试的方法中提供的参数来删除第二个调用?
存根的方法:
public SupportDetails GetSupportDetails(string languageKey)
{
var result = FindSupportDetails(languageKey);
return result ?? FindSupportDetails("en-us");
}
Run Code Online (Sandbox Code Playgroud)
我当前的测试:
public void GetsUSDetails_IfLangKeyDoesNotExist()
{
var langKey = "it-it";
_repo.Stub(s => s.FindSupportDetails(langKey))
.Return(supportDetails.Where(sd => sd.LanguageKey == langKey)
.SingleOrDefault());
ISupportRepository repo = _repo;
var actual = repo.GetSupportDetails(langKey);
Assert.AreEqual("en-us", actual.LanguageKey);
}
Run Code Online (Sandbox Code Playgroud)
以及测试中使用的supportDetails对象:
supportDetails = new SupportDetails[]
{
new SupportDetails()
{
ContactSupportDetailsID = 1,
LanguageKey = "en-us"
},
new SupportDetails()
{
ContactSupportDetailsID = 2,
LanguageKey = "en-gb"
},
new SupportDetails()
{
ContactSupportDetailsID = 3,
LanguageKey = "es-es" …Run Code Online (Sandbox Code Playgroud) 我正在通过Rails教程进行工作,并且正在尝试测试有效的用户登录名。 但是,当我运行测试时,我得到了NoMethodError:undefined method`digest'。我已经查看了所有内容,但不明白为什么会收到此错误。我什至采取了复制/粘贴教程代码的方式,以确保它不是拼写错误或键入时遗漏的其他内容。
这是我的用户模型:
class User < ApplicationRecord
before_save { email.downcase! }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
end
Run Code Online (Sandbox Code Playgroud)
和我的装置:
test_user:
name: Test User
email: testuser@example.com
password_digest: <%= User.digest('password') %>
Run Code Online (Sandbox Code Playgroud)
和我的测试: …