我给了一个任务,在2017年写的这个特定的类中编写单元测试,但是因为我是新来的,代码结构太糟糕了,我无法找到最好的方法来编写单元测试,任何人都可以帮助这个或提供一些见解。
我也被告知不要为它改变太多的商业逻辑。
module Alpha
module Beta
module Gamma
class User
class SsoUser
def self.find(type, organization, user_identifier)
if user_identifier.blank?
raise Error.new(
'user_identifier must be provided',
400,
'missing.required.attribute'
)
end
case type.try(:downcase)
when 'admin'
AdminUser.new().find_admin(organization, user_identifier)
when 'subscriber'
SubscriberUser.find(organization, user_identifier)
when 'master_admin'
AdminUser.new().find_master_admin(organization,user_identifier)
else
raise Error.new(
"'type' parameter must be one of [admin,subscriber,master_admin]",
400,
'missing.required.attribute'
)
end
end
end
end
end
end
end
现在,我需要编写测试的类名是SsoUser,这里使用的其他类是Error,AdminUser(基于类型-'admin'或类型-'master_admin'返回用户对象),SubscriberUser(也基于类型-'subscriber'返回用户)。
user_identifier是'user_name',它是字符串,类型也是如上所述的字符串,组织将给出一个ID。
提前道歉,如果有什么不清楚的地方。
我在编写此类中self.method的测试时遇到问题。还有如何测试那些硬编码的类,这些类应该理想地用构造函数方法编写。我没有尝试太多,因为我还是新手。
1条答案
按热度按时间j0pj023g1#
我可以告诉你从哪里开始,并使用同样的原理继续你的测试
organization(:first)和user(:admin)-这是您应该在测试文件夹(/test/fixtures/user.yml和/test/fixtures/organization.yml)中创建的fixture。在此page中,您可以找到其他Assert和工具,它们可以帮助您编写测试
我写了近似的代码,其中可能包含潜在的错误,但一般的想法看起来是这样的